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 /newsPUT /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 {@AutowiredRestHighLevelClient 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 {@Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));return client;}}