栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticSearch-基础知识总结

ElasticSearch-基础知识总结

ES ES的DSL索引/映射/文档的使用 1.索引

创建

put 索引名称

创建索引并设置映射

删除

delete 索引名称

查找

get 索引名称

添加mapping字段

索引mapping字段创建好后,无法直接修改

但是可以添加新的mapping字段

 

2.映射

为已有索引添加映射

put 索引名称/_mapping{"properties":{"字段名1":{"type":"字段类型"},......}}

3.文档

新增

查询

get 索引库名/_doc/{文档id}

删除

delete 索引库名/_doc/{文档id}

修改

1.全量修改

根据id删除原文档,新增一个id相同文档

 

2,增量修改

只修改指定id文档的部分字段

 

ES索引库/文档在代码中的实现 1.导入ES依赖 2.初始化RESTHighLevelClient

使用完成后需要close

各种操作的代码实现

1.索引

创建索引

删除索引

判断索引是否存在

2.文档

新增文档

查询文档

删除文档

更新文档

1.局部更新

2.全量更新

同新增文档操作,将字段值改为新的就可以

批量添加文档

1.准备批量数据

2.new BulkRequest()对象

3.把数据全部放进bulkRequest中

ES中DSL查询文档 查询所有

Get /索引名称/_search { "query":{ "match_all":{}}}

Get /索引名称/_search

全文检索

执行流程

1.根据输入内容做分词,得到词条

2.根据词条去倒排索引库中匹配,得到文档id

3.根据文档id得到文档

使用场景

商城的搜索框

注意事项

因为需要进行分词得到词条,所以参与搜索的字段也必须是可分词的text类型字段.

语法

单字段查询

Get /索引库名称/_search { "query":{ "match":{ "查询字段名称":"查询字段内容(text)" }}}

多字段查询

Get /索引库名称/_search { "query":{ "multi_match":{ "query":"查询字段内容" "fileds":["查询字段名1","查询字段名2"]}}}

参与查询字段越多,性能越低,所以建议将查询次数较多的字段,利用copy_to,放到公共字段里作为查询数据,以减少字段数

精确查询

概念

一遍查找keyword,数值等不会分词的字段,以精准定位到符合条件的数据.

根据词条进行精准查询

Get /索引库名/_search { "query":{ "term":{ "查询字段名称":{ "value":"条件值" }}}}

根据值的范围进行范围查询

Get /索引库名/_search { "query":{ "range":{ "字段名称":{ "gte(大于等于)":数值1, "lte(小于等于)":数值2}}}}

地理位置查询

官方文档

Geo queries | Elasticsearch Guide [8.0] | Elastic

根据地址位置的经纬度进行查询

矩形范围查询

需要指定矩形的左上和右下两个点的经纬坐标确定一个矩形,在这个矩形范围内的位置都算

Get /索引库名/_search { "query":{ "geo_bounding_box":{ "字段名称":{ "top_left":{ "lat":纬度坐标, "lon":经度坐标 }, "bottom_right":{ "lat":纬度坐标, "lon":经度坐标 }}}}}

附近查询

需要指定圆心和半径,确定一个圆的范围

Get /索引库名/_search { "query":{ "geo_distance":{ "distance": "半径和单位", "地理位置字段名":"经坐标,纬坐标" }}}}

复合查询

概念

将简单查询的组合

算分函数查询

可以控制文档的分数,控制文档的排名

ES使用的打分算法为:BM25算法,它会对词条算分进行控制,保证词条频率增加时,算分也能保持稳定.

组成部分

原始条件

过滤条件

算分函数

运算模式

Get /索引库名/_search { "query":{ "function_score":{ "query":{任意查询条件}, "functions":[ { "filter":{ 需要满足的条件 } , "weight": 算分权重数字 } ], "boost_mode":"加权模式" }}}

布尔查询

是一个或多个查询子句的组合

组合方式

must:必须匹配每个子查询,类似与

should:选择性匹配每个子查询,类似或

must_not:必须不匹配,不参与算分,类似非

filter:必须匹配,不参与算分

GET /索引库名称/_search {   "query": {     "bool": {       "must": [         {"term": {"字段名称": "字段值" }}       ],       "should": [         {"term": {"字段名称1": "字段值1" }}, {"term": {"字段名称2": "字段值2" }}       ],       "must_not": [         { "range": { "字段名称": { "lte": 值 } }}       ],       "filter": [         { "range": {"字段名称": { "gte": 值 } }}       ]}}}

注意在这些布尔查询里可以写任何条件,这里只是举例

搜索结果处理

排序

可以排序的字段有keyword,数值类型,地理坐标,日期类型等

普通字段排序

GET /索引库名称/_search {   "query": {     "match_all": {}   },   "sort": [     {       "FIELD": "desc"  // 排序字段、排序方式ASC、DESC     },   {       "FIELD": "desc"  // 排序字段、排序方式ASC、DESC     }, ...........   ]}

地理坐标排序

GET /索引库名称/search {   "query": {     "match_all": {}   },   "sort": [     {       "geo_distance" : {           "FIELD" : "纬度,经度", // 文档中geo_point类型的字段名、目标坐标点           "order" : "asc", // 排序方式           "unit" : "km" // 排序的距离单位       } }]}

指定一个坐标,作为目标点

计算每一文档中,指定字段(必须是geo_point类型的位置)到目标点的距离是多少

根据距离排序

分页

GET /索引库名称/_search {   "query": {     "match_all": {}   },   "from": 0, // 分页开始的位置,默认为0   "size": 10, // 期望获取的文档总数   "sort": [     {"排序字段名称": "asc"}   ] }

深度分页问题

search after

官方推荐使用方式,分页时排序,从上一次的排序值开始,查询下一页数据

scroll

官方不推荐

高亮处理

GET /索引库名称/_search {   "query": {     "match": {       "FIELD": "TEXT" // 查询条件,高亮一定要使用全文检索查询     }   },   "highlight": {     "fields": { // 指定要高亮的字段       "FIELD": {         "pre_tags": "",  // 用来标记高亮字段的前置标签         "post_tags": "" // 用来标记高亮字段的后置标签       }}}}

默认情况下,高亮的字段,必须与搜索指定的字段一致**,否则无法高亮

如果要对非搜索字段高亮,则需要添加一个属性:required_field_match=false

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/746470.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号