当前位置: 首页 > 科技观察

Elasticsearch查询聚合DSL语句集

时间:2023-03-13 02:57:28 科技观察

作者:京东科技纪海宇数据查询、聚合等操作,DSL对SE的意义就像SQL对MySQL一样。学会如何写查询语句,决定了你后期能否完全驾驭ES,所以非常重要。本主题主要是分享常用的DSL语句。可以使用。1.match如果match查询数字、日期、布尔值或not_analyzed字符串,则不进行分词分析,直接匹配搜索值;match如果查询全文,会对查询词进行分词分析,然后进行搜索。例如关键字类型的标签查询,“京东总部”不会分词,只搜索完全相等的词{a"query":{"match":{"content":{"tag":"京东总部"}}}}比如"宝马多少马力"会被分割成"宝马多少马力",所有与"宝马多少马力"相关的文档,则所有包含一个或更多的这三个词将被搜索出来。并根据Lucene的评分机制(TF/IDF)进行评分{"query":{"match":{"content":{"query":"宝马有多大马力"}}}}二、match_phrase如果你想准确匹配所有同时包含“宝马有多少马力”的文档,需要使用match_phrase{“query”:{“match_phrase”:{“content”:{“query”:“宝马有多少马力”}}}}第三,如果我们要匹配两个字段,如果其中一个字段满足这个文档,使用multi_match{"query":{"multi_match":{"query":"我的宝马有多大马力","fields":["title","content"]}}}4.term关键词精确匹配,不分词。注意术语包含(contains)操作,不是等价(equals)判断。如果文档包含全文和其他词,也会返回命中。要使用term来判断这个字段是否被“分析”(analyzed),默认的字符串是analyzed。例如,在下面的例子中,已经分析了full_text,所以full_text索引存储[quick,foxes],extra_value存储[QuickFoxes!]PUTmy_index{"mappings":{"my_type":{"properties":{"full_text":{"type":"string"},"exact_value":{"type":"string","index":"not_analyzed"}}}}}PUTmy_index/my_type/1{"full_text":"QuickFoxes!","exact_value":"QuickFoxes!"}请求不到数据,因为full_text分词结果中没有单词[QuickFoxes!]GETmy_index/my_type/_search{"query":{"term":{"full_text":"QuickFoxes!"}}}5.terms指定多值精确匹配。如果该字段包含任何指定值,则文档满足条件。类似于sql中的in{"terms":{"tag":["search","full_text","nosql"]}}。6.区间数/时间的区间查询,运算符:gt>大于gte>=?lt