您的位置:首页 > 娱乐 > 八卦 > 青岛app开发公司排行榜_简单html个人网页模板_百度关键词指数_外贸建站seo

青岛app开发公司排行榜_简单html个人网页模板_百度关键词指数_外贸建站seo

2024/10/31 11:13:04 来源:https://blog.csdn.net/2301_80931793/article/details/143253420  浏览:    关键词:青岛app开发公司排行榜_简单html个人网页模板_百度关键词指数_外贸建站seo
青岛app开发公司排行榜_简单html个人网页模板_百度关键词指数_外贸建站seo

基础概念

elasticsearch 是面向 文档存储 的,可以是数据库中的一条商品数据,一个订单信息。
文档数据会被序列化为 json 格式后存储在 elasticsearch 中。

索引

类似Mysql中的表

同类型文档的集合

文档

类似于Mysql中的行数据

一条数据就是一个文档,es中是Json格式

字段

类似于数据库中的列数据

Json文档中的字段

映射

类似于Mysql中的Schema,表结构

索引中文档的约束,比如字段名称,类型

正向索引

Mysql 采用正向索引:基于文档 id 创建索引。查询词条时必须先找到文档,而后判断是否包含搜索的内容

倒排索引

elasticsearch 采用倒排索引:
文档(document):每条数据就是一个文档
词条(term):文档按照语义分成的词语

ES索引库基本操作

创建索引库

mapping 属性

mapping 是对索引库中文档的约束,常见的 mapping 属性包括:
type:字段数据类型,常见的简单类型有:
字符串:text(可分词的文本),keyword(精确值,例如:品牌,国家,邮箱)
数值:long、integer、short、byte、double、float、
布尔:boolean
日期:date
对象:object index:是否创建索引参与搜索,默认为 true,如果不需要参与搜索设置为 false
analyzer:使用哪种分词器

创建索引库和 mapping 的语法如下:

PUT /news
{"mappings": {"properties": {"id":{"type": "keyword","index": false},"title":{"type": "text","analyzer": "ik_max_word"},"img":{"type": "keyword","index": false},"operTime":{"type": "date","index": false}}}
}

查询索引库

语法: GET /索引库名
实例: GET /news

删除索引库

语法: DELETE /索引库名
实例: DELETE /news

修改索引库

索引库和mapping一旦创建无法修改,但是可以添加新的字段

PUT /news/_mapping
{"properties":{"count":{"type":"long"}}
}

ES文档操作

新增文档

POST /索引库名/_doc/文档 id
{ “字段名 1”:”值 1”
“字段名 2”:”值 2”
..... }

例如:

POST /news/_doc/1
{"id":1,"title":"三体人向地球开战","img":"11111111111111111111.jpg","dzcount":8888888
}POST /news/_doc/2
{"id":2,"title":"智子被地球人捕获,用来犁地","img":"11111111111111111111.jpg","dzcount":88888889
}POST /news/_doc/3
{"id":3,"title":"歌者文明向三体星系投放二向箔","img":"11111111111111111111.jpg","dzcount":66666666666
}POST /news/_doc/4
{"id":4,"title":"地球通过宇宙广播毁灭了三体星系","img":"11111111111111111111.jpg","dzcount":66666666666
}POST /news/_doc/5
{"id":5,"title":"歌者文明投放的二向箔导致地球毁灭","img":"11111111111111111111.jpg","dzcount":66666666666
}

向news中添加5条如上的文档

此时可以在ES head项目中查看添加好的数据

查询文档

语法:
GET /索引库名/_doc/文档 id

删除文档

语法:
DELETE /索引库名/_doc/文档 id

修改文档

POST /索引库名/_update/文档 id
{
"doc":{
"要修改的字段":"新值"
}
}
例如:
POST /news/_update/1
{"doc":{"title":"三体人向地球开战,向地球投放智子"}
}

搜索文档

GET /news/_search
{
"query":{
"match":{
"title":" 美国 "
              }
      }
}
例如:
GET /news/_search
{"query": {"match": {"title": "地球毁灭"}}
}

通过分词器我们可以查询到搜索内容分词后的全部搜索内容

        

将地球毁灭分词为地球和毁灭,分别搜索到了3条和分词相关的内容

 SpringBoot集成ES

官网地址: https://www.elastic.co/guide/en/elasticsearch/client/index.html
指定版本,版本必须与安装的 ES 版本一致
< properties >
< java.version >1.8</ java.version >
< elasticsearch.version >7.6.1</ elasticsearch.version >
</ properties >
添加依赖
< dependency >
< groupId >org.elasticsearch.client</ groupId >
< artifactId >elasticsearch-rest-high-level-client</ artifactId >
</ dependency >
添加初始化 RestHighLevelClient 的配置类

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticSearchConfig {@Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));return client;}}
索引库操作
创建索引库
CreateIndexRequest request = new CreateIndexRequest("users");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request,
RequestOptions.DEFAULT);

判断索引库是否存在
GetIndexRequest request = new GetIndexRequest("users");
boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);

删除索引库
DeleteIndexRequest indexRequest = new DeleteIndexRequest("users");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(indexRequest,
RequestOptions.DEFAULT);
delete.isAcknowledged();//返回 true 删除成功,返回 false 删除失败

文档操作
添加文档
//将新闻添加到 mysql 的同时,将数据同步更新到 ES,为搜索提供数据
News news = new News();
news.setId(3);
news.setTitle("美国今年要总统选择,拜登着急了");
news.setImg("aaaaasssss.jpg");
IndexRequest indexRequest = new IndexRequest("news").id(news.getId().toString());
//将对象转为 json 存进 ES
indexRequest.source(new ObjectMapper().writeValueAsString(news),XContentType.JSON);
restHighLevelClient.index(indexRequest,RequestOptions.DEFAULT);修改文档
News news = new News();
news.setId(3);
news.setTitle("中国航母开往美国,准备开战,拜登着急了");
news.setImg("dddddddddddd.jpg");
UpdateRequest updateRequest = new UpdateRequest("news",news.getId().toString());
updateRequest.doc(new ObjectMapper().writeValueAsString(news), XContentType.JSON);
restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);

查询文档
GetRequest getRequest = new GetRequest("news","1");
GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
//获取查询的内容,返回 json 格式
String json = getResponse.getSourceAsString();
//使用 jackson 组件将 json 字符串解析为对象
News news = new ObjectMapper().readValue(json, News.class);

删除文档
DeleteRequest deleteRequest = new DeleteRequest("news","1");
DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);

搜索文档
SearchRequest searchRequest = new SearchRequest("news");
SearchRequest searchRequest = new SearchRequest("news");
//精确条件查询
searchRequest.source().query(QueryBuilders.termQuery("title","美国"));
//发送查询请求
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//接收查询结果
SearchHits hits = search.getHits();
//组装查询结果
ArrayList<News> list = new ArrayList<>();
//取出结果集
for (SearchHit searchHit : hits.getHits()){
String json = searchHit.getSourceAsString();
News news = new ObjectMapper().readValue(json,News.class);
list.add(news);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com