一.认识elasticsearch
1.是一款强大的开源索引,可以帮助我们从海量数据中快速找到需要的内容
二.正向索引和倒排索引
2.倒排索引是借助文档(document)和词条(term)来实现的,每条数据就是一个文档,文档id类似于表的主键id;词条就是把一句话给分开
3.倒排索引是先命中词条然后通过命中词条对应文档的id去表中查找对应的数据
4.在ES里index是表、document是一条数据、field是一个字段、Mapping是建表语句、DSL是SQL
5.使用IK分词器进行分词
6.默认分词器=standard、ik_smart分词器、ik_max_word分词器
7.添加IK分词器
8.禁用优先级比拓展优先级高
三.索引库操作
1.索引库字段数据类型常见的有两种:text(可分词的文本)、keyword(精确值,比如品牌、国家、ip)
2.analyzer要使用哪种分词器
3.properties:该字段的子字段
4.创建索引库
5.索引库名和mapping一但被创建无法修改,但可以添加字段
四.文档操作
1.文档id是跟数据库的某一条数据的id是一样的
2.全量修改=会删除旧文档,添加新文档
3.增量修改=修改指定字段词
五.RestClient操作索引库
1.根据数据库创建索引库
2.引入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
3.在启动类初始化RestHighLevelClient
4.创建请求方式、发送请求
六.RestClient操作文档
1.在启动类初始化RestHighLevelClient
2.新增功能:查找数据库中的数据、将查找出来的数据转换为json、调用es的api文档来完成操作
3.批量导入文档:
//查询数据库所有数据
List<Hotel> list = iHotelService.list();
//创建批量对象
BulkRequest request=new BulkRequest();
for (Hotel hotel : list) {
HotelDoc hotelDoc=new HotelDoc(hotel);
String jsonString = JSON.toJSONString(hotelDoc);
request.add(new IndexRequest("hotel185").id(hotelDoc.getId().toString()).source(jsonString,XContentType.JSON));
}
client.bulk(request,RequestOptions.DEFAULT);
七.DSL查询文档
1.查询所有:查询所有数据。match_all
2.全文检索查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如match、multi_match
3.精确查询:根据精确词条查找数据。例如:term--根据词条精确查询;range--根据值的范围查询
4.地理(geo)查询:根据经纬度查询。例如:geo_distance、geo_bounding_box
5.复合(compound)查询:合并查询条件。例如:bool、function_score(算分函数)
八.搜索处理结果
1.排序---sort根据query同级
2.分页
3.高亮(highlight)