欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

ElashSearch基础语法(ES8.0)

时间:2023-04-27

1、CRUD

创建索引

索引与数据库中的表类似

#语法 PUT /索引名称PUT /test_index

删除索引

DELETe /test_index

向索引中插入数据

#方法1、手动设置ID (如果已经存在相同的ID,则执行更新操作)# PUT /索引名称/_doc/id值PUT /test_index/_doc/1{ "name":"zhangsan", "age":"12"}#方法2、自动设置ID 使用POST提交#POST /索引名称/_docPOST /test_index/_doc{ "name":"zhangsan", "age":"12"}

删除指定索引的数据

#删除索引数据 DELETE /索引名称/_doc/ID值DELETE /test_index/_doc/1#删除多条数据 ID值用逗号隔开(,)DELETE /test_index/_doc/1,2,3,4

2、查询

查询索引下的所有数据

# GET /索引名称/_search (包含查询信息)GET /test_index/_search# 查询索引下某一ID值 (只返回数据内容)GET /test_index/_doc/1

查询超时设置

        超时机制,假设,查询1万条数据。需要10毫秒,设置超时时间为1毫秒,当到达超时时间后,立即停止查询,并返回当前查询到的数据

#方法1: 通过参数进行设置(注意;超时单位 s/ms/m)GET /test_index/_search?timeout=1ms#方法2: 在消息体中设置(注意;超时单位)GET /test_index/_search{ "timeout": "1ms"}

 URL中带参数查询

#get /索引/_search?q=对象属性名:值GET /test_index/_search?q=age:45

分页查询

# GET /索外名称/_search?# from=起始条数# size=每页多少数据# sort=排序规则:asc或desc (注意mapping中的字段类型,部分类型不允许排序)GET /test_index/_search?from=0&size=2&sort=age.keyword:desc

显示如下错误,代表字段类型不允许排序

Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default、Please use a keyword field instead、Alternatively, set fielddata=true on [age] in order to load field data by uninverting the inverted index、Note that this can use significant memory

3、 查询DSL 匹配所有

#match_all 查询所有数据GET /test_index/_search{ "query": { "match_all": {} }}

单字段匹配match

#match 中设置相关的字段与数据#match在匹配时会对所查找的关键词进行分词,然后按分词匹配查找GET /test_index/_search{ "query": { "match": { "name": "my name is bl" } }}match匹配完成后会将"my name is bl"分成 my name is bl 4个词进行查找。

单字段匹配term

#term 会直接对关键词进行查找#如: my name is bl 会直接当成一个词“my name is bl”# match 会分成4个词GET /test_index/_search{ "query": { "term": { "name": "zhang" } }}

多字段匹配multi_match

# 多个字段根据query中的内容进行匹配# 如下:# 分别查询 name字段和desc字段中包含 query查询中的内容 (内容作分词处理)GET /test_index/_search{ "query": { "multi_match": { "query": "查询的内容", "fields": ["name","desc"] } }}

排序sort

#sort 排序GET /test_index/_search{ "sort": [ { "age.keyword": { "order": "desc" } } ]}

返回指定的字段_source

#设置查询返回的字段内容# 只返回name和age字段GET /test_index/_search{ "query": { "match_all": {} }, "_source": [ "name","age" ]}

分页查询 from fro

# from,起始条数 总共多少条数据GET /test_index/_search{ "from": 0, "size": 10}

match_phrase 短语搜索

# match_phrase 将数据分词后进行搜索的# 1、目标文档需要包含分词后的所有词# 2、目标文档还要保持这些词的相对顺序和文档中的一致# 3、只有当这三个条件满足,才会命中文档!## 而不像 match那样,将"li zhang san"分成三个词进行探索GET /test_index/_search{ "query": { "match_phrase": { "name": "li zhang san" } }}

4、 查询和过滤

must:必须满足子句(查询)必须出现在匹配的文档中,并将有助于得分。filter:过滤器不计算相关分数 子句(查询)必须出现在匹配的文档中。但是不像 must查询的分数将被忽略。Filter子句在filter上下文中执行,这意味着计分被忽略,并且子句被考虑用于缓存。should:可能满足 子句(查询)应出现在匹配的文档中。must_not:必须不满足 不计算相关度分数  子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。由于忽略计分,0因此将返回所有文档的分数。minimum_should_match 参数指定should返回的文档必须匹配的子句的数量或百分比。如果bool查询包含至少一个should子句,而没有must或 filter子句,则默认值为1。否则,默认值为0

例:#首先筛选name包含“xiaomi phone”并且价格大于1999的数据(不排序),#然后搜索name包含“xiaomi”and desc 包含“shouji”

GET /test_index/_search{ "query": { "bool": { "must": [ # name 包含xiaomi and desc包含 shouji { "match": { "name": "xiaomi" } }, { "match": { "desc": "shouji" } } ], "filter": [ # name中包含 "xiaomi phone" and 价格大于 1999 { "match_phrase":{ "name":"xiaomi phone" } }, { "range": { "price": { "gte": 1999 } } } ] } }}

#bool多条件 name包含xiaomi 不包含erji 描述里包不包含nfc都可以,价钱要大于等于4999GET /product/_search{ "query": {"bool":{#name中必须不能包含“erji” "must": [ {"match": { "name": "xiaomi"}} ],#name中必须包含“xiaomi” "must_not": [ {"match": { "name": "erji"}} ],#should中至少满足0个条件,参见下面的minimum_should_match的解释 "should": [ {"match": { "desc": "nfc" }} ], #筛选价格大于4999的doc "filter": [ {"range": { "price": { "gt": 4999 } }} ] } }}

Highlight search 显示

GET /test_index/_search{ "query": { "match": { "name": "zhang" } }, "highlight": { "fields": { "name": { "pre_tags": [ "" ], "post_tags": [ "" ] } } }}

 scroll search

游标查询:查询完成后返回scroll_id,在指定时间范围内,根据scroll_id即可查询下一组数据

#第一次返回内容GET /test_index/_search?scroll=1m{ "size": 1}#第一次返回内容{ "_scroll_id" : "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFlozTXlNbXlzUXYtdklzQWtvVHcxeWcAAAAAAABt3hZqeV9pWEh4cVROcUtDVXMzWHB0cjdR", "took" : 0, "timed_out" : false, #其他返回内容忽略}#第二次查询,直接根据scroll_id进行查询GET /_search/scroll{ "scroll":"1m", "scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFlozTXlNbXlzUXYtdklzQWtvVHcxeWcAAAAAAABt3hZqeV9pWEh4cVROcUtDVXMzWHB0cjdR"}#第二次返回内容{ "_scroll_id" : "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFlozTXlNbXlzUXYtdklzQWtvVHcxeWcAAAAAAABt3hZqeV9pWEh4cVROcUtDVXMzWHB0cjdR", "took" : 20, "timed_out" : false, #其他返回内容忽略}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。