本文共 2744 字,大约阅读时间需要 9 分钟。
首先列一下官网说明
kibana控制台: elasticsearch7.5 query DSL:一、系统级查询
#检查群集运行状况GET /_cat/health?v #获得群集中的节点列表GET /_cat/nodes?v #列出所有索引GET /_cat/indices?v #创建索引并查看PUT /customer?prettyGET /_cat/indices?v
二、DSL查询(使用DSL查询,必须要传递query参数给ES)
# dsl查询 --> 高级查询+分页+排序+截取字段 【desc:降序 asc:升序 from:从第几页开始 size:每页多少条数据 _source:要哪几个字段】GET errinfo-scm-2020.02.17/_search{ "query": { "match_all": {} }, "sort": [ { "errortime.keyword": { "order": "asc" } } ], "from": 0, "size": 10, "_source": [ "errortime", "errorlevel", "errorclass" ]}
注意:sort里面要使用**.keyword, _source里面则使用不带keyword的字段,否则会报错。
三、DSL过滤查询
基本格式:
#格式{ "query" : { "bool" : { "must" : [{ "match_all":{} }], "filter":{...} } }}
四、标准查询(match和multi_match)
match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
如果你使用match查询一个全文本字段,它会在真正查询之前用分析器先分析查询字符:{ "query": { "match": { "fullName": "Jeff King" } }}
上面的搜索会对Jeff King分词,并找到包含Jeff或King的文档,然后给出排序分值。
如果用 match 下指定了一个确切值,在遇到数字,日期,布尔值或者 not_analyzed的字符串时,它将为你搜索你给定的值,如:
{ "match": { "age": 26 }} { "match": { "date": "2019-11-01" }} { "match": { "public": true }} { "match": { "tag": "full_text" }}
multi_match 查询允许你做 match查询的基础上同时搜索多个字段:
{ "query":{ "multi_match": { "query": "Jeff King", "fields": [ "fullName", "nick name" ] } }}
上面的搜索同时在fullName和nick name字段中匹配。
提示:match一般只用于全文字段的匹配与查询,一般不用于过滤,过滤使用filter。
五、单词搜索与过滤(Term和Terms)
{ "query": { "bool": { "must": { "match_all": {} }, "filter": { "term": { "tags": "elasticsearch" } } } }}
Terms搜索与过滤,minimum_match:至少匹配个数,默认为1
{ "query": { "terms": { "tags": ["jvm", "hadoop", "lucene"], "minimum_match": 2 } }}
六、组合条件搜索与过滤(Bool)
组合搜索bool可以组合多个查询条件为一个查询对象,查询条件包括must、should和must_not。
例如:查询爱好有美女,同时也有喜欢游戏或运动,且出生于1990-06-30及之后的人。{ "query": { "bool": { "must": [{"term": {"hobby": "美女"}}], "should": [ {"term": {"hobby": "游戏"}}, {"term": {"hobby": "运动"}} ], "must_not": [ {"range" :{"birth_date":{"lt": "1990-06-30"}}} ], "filter": [...], "minimum_should_match": 1 } }}
提示: 如果 bool 查询下没有must子句,那至少应该有一个should子句。但是 如果有 must子句,那么没有 should子句也可以进行查询。
七、范围查询与过滤(range)
range过滤允许我们按照指定范围查找一批数据: gt:> gte:>= lt:< lte:<=
ex:查询年龄大于等于18并且小于20。{ "query":{ "range": { "age": { "gte": 18, "lt": 20 } } }}
八、存在和缺失过滤器(exists和missing),
exists和missing只能用于过滤结果{ "query": { "bool": { "must": [{ "match_all": {} }], "filter": { "exists": { "field": "gps" } } } }}
九、 前匹配搜索与过滤(prefix)
和term查询相似,前匹配搜索不是精确匹配,而是类似于SQL中的like ‘key%’ ex:查询姓郑的所有人。{ "query": { "prefix": { "fullName": "王" } }}十、通配符搜索(wildcard) 使用*代表0~N个,使用?代表1个。
{ "query": { "wildcard": { "fullName": "王*五" } }}
转载地址:http://acfsi.baihongyu.com/