ES概述
开源的、高扩展的、分布式全文检索引擎【站内搜索】
解决问题
1.搜索词是一个整体时,不能拆分(mysql整体连续)
2.效率会低,不会用到索引(mysql索引失效)
解决方式
进行数据的存储(只存储查询显示的内容)和检索
其他功能:日志统计、分析、监控。
ES名词解释
索引:同类型的文档集合
文档:以json形式,一条数据就是一个文档(mysql中的一行记录)
字段:json文档中的字段
映射:索引(表)中的文档(记录数据)约束:字段名称、类型,是否分词
正向索引:mysql
倒排索引:ElasticSearch使用倒排索引,对搜索内容进行分词,分出来的词成为词条,对词条进行分类统计,由高到低进行排序。
ES操作
索引操作
#创建索引库(PUT),查询索引库(GET),删除索引库(DELETE),添加新字段(PUT /news/_mapping)
PUT /news
{
"mappings": {
"properties": {
"id":{
"type": "integer",
"index": false
},
"title":{
"type": "text",
"analyzer": "standard"
},
"content":{
"type": "text",
"analyzer": "standard"
}
}
}
}
GET /news
DELETE /news
PUT /news/_mapping
{
"properties": {
"count":{
"type": "long",
"index": false
}
}
}
文档操作
#文档操作
PUT /news/_doc/1
{
"id":1,
"title":"美丽中国",
"content":"当前,我国经济社会发展已进入加快绿色化、低碳化的高质量发展阶段,生态文明建设仍处于压力叠加、负重前行的关键期,生态环境保护结构性、根源性、趋势性压力尚未根本缓解,资源压力较大、环境容量有限、生态系统脆弱的国情没有改变,经济社会发展绿色转型内生动力不足,生态环境质量稳中向好的基础还不牢固,污染物和碳排放总量仍居高位,部分区域生态系统退化趋势尚未根本扭转,美丽中国建设任务依然艰巨。",
"count":20
}
PUT /news/_doc/2
{
"id":2,
"title":"不忘初心",
"content":"当前,我国经济社会发展已进入加快绿色化、低碳化的高质量发展阶段,生态文明建设仍处于压力叠加、负重前行的关键期,生态环境保护结构性、根源性、趋势性压力尚未根本缓解。",
"count":10
}
GET /news/_doc/1
DELETE /news/_doc/1
POST /news/_update/1
{
"doc":{
"title":"中国"
}
}
GET /news/_search
{
"query": {
"match": {
"content":"我国"
}
}
}
SpringBoot 集成 ES
指定版本,版本必须与安装的 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>
@RestController
@RequestMapping(path = "/index/elastic")
public class ElasticSearchController {
@Autowired
RestHighLevelClient restHighLevelClient;
@GetMapping(value = "/test")
public String test() throws IOException {
//创建索引库
CreateIndexRequest request = new CreateIndexRequest("users");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
//判断索引库是否存在
//GetIndexRequest request1 = new GetIndexRequest("users");
return "success!";
}
}
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 {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
}
}