您好,登錄后才能下訂單哦!
這篇文章主要介紹“elasticsearch的DSL查詢方法有哪些”,在日常操作中,相信很多人在elasticsearch的DSL查詢方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”elasticsearch的DSL查詢方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
查詢,完全匹配,即不進行分詞器分析
{ "query": { "term": { "<field>": "<value>" } } }
查詢,模糊匹配,根據你給定的字段進行分詞器分析,只包含一部分關鍵字就行
{ "query": { "match": { "<field>": "<value>" } } }
查詢指定索引下的所有文檔
{ "query": { "match_all": {} } }
通過 match_all
過濾出所有字段,然后通過 partial
再過濾出包含 preview
的字段和排除 title,price
的字段
{ "query": { "match_all": {} }, "partial_fields": { "partial": { "include": ["preview"], "exclude": ["title,price"] } } }
短語查詢,slop
定義的是關鍵詞之間隔多少個未知單詞
{ "query": { "match_phrase": { "query": "aaa,bbb", "slop": 2 } } }
查詢,可以指定多個字段
查詢 filed1
和 filed2
這兩個字段都包含 value
關鍵字的文檔
{ "query": { "multi_match": { "query": "<value>", "fileds": ["<field1>", "<field2>"] } } }
布爾查詢
must
: 條件必須滿足,相當于 sql
語句的 and
should
: 條件可以滿足也可以不滿足,相當于 sql
語句的 or
must_not
: 條件不需要滿足,相當于 sql
語句的 not
{ "query": { "bool": { "should": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], "must": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], "must_not": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], } } }
查詢同時,通過 filter
條件在不影響打分的情況下篩選出想要的數據
{ "query": { "filtered": { "query": { "match_all": {}, }, "filter": { "term": { "<field>": "<value>" } } } } }
filter
之 bool
過濾查詢
must
: 條件必須滿足,相當于 sql
語句的 and
should
: 條件可以滿足也可以不滿足,相當于 sql
語句的 or
must_not
: 條件不需要滿足,相當于 sql
語句的 not
{ "query": { "filtered": { "query": { "match_all": {}, }, "filter": { "bool": { "should": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], "must": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], "must_not": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], } } } } }
沒有 bool
, 也可以直接使用 and、or、not
{ "query": { "filtered": { "query": { "match_all": {}, }, "filter": { "and": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], "or": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], "not": [ {"term": {"<field>": "<value>"}}, {"term": {"<field>": "<value>"}} ], } } } }
filter
之 range
范圍查詢
gt
: 大于
lt
: 小于
gte
: 大于等于
lte
: 小于等于
{ "query": { "filtered": { "query": { "match_all": {}, }, "filter": { "range": { "<field>": { "gt": "<value>", "gte": "<value>", "lt": "<value>", "lte": "<value>", } } } } } }
固定分數查詢 我們查詢到的每一個文檔都有一個_score
參數,這是匹配度打分
constant_score
: 固定分數查詢關鍵字(它支持 filter
, 不支持 match)
boost
: 指定固定分數字段
{ "query": { "constant_score": { "filter": { "match": { "<field>": "<value>" } }, "boost": 1 } } }
聚合分析
分組,對應 sql
語句中的 group by
{ "aggs": { "<tag_name>": { "terms": { "field": "<value>" } } } }
去重,對應 sql
語句中的 distinct
{ "aggs": { "<tag_name>": { "cardinality": { "field": "<value>" } } } }
求平均值
{ "aggs": { "<tag_name>": { "avg": { "field": "<value>" } } } }
求平均值
{ "aggs": { "<tag_name>": { "max": { "field": "<value>" } } } }
求平均值
{ "aggs": { "<tag_name>": { "min": { "field": "<value>" } } } }
求平均值
{ "aggs": { "<tag_name>": { "sum": { "field": "<value>" } } } }
按照指定區間分組
{ "aggs": { "<tag_name>": { "field": "<value>", "range": [ {"from": 0, "to": 20}, {"from": 20, "to": 40}, {"from": 40, "to": 60} ] } } }
按時間統計
min_doc_count
: 強制返回所有 buckets
,即使 buckets
可能為空
extended_bounds
: 只返回你的數據中最小值和最大值之間的 buckets
{ "aggs": { "<tag_name>": { "date_histogram": { "<field>": "<value>", "interval": "month", "format": "yyyy-MM-dd", "min_doc_count" : 0, "extended_bounds" : { "min" : "2014-01-01", "max" : "2014-12-31" } } } } }
使用collapse字段后,查詢結果中[hits]中會出現[fields]字段,其中包含了去重后的user_id ES5.3版本之后才發布的 聚合&折疊只能針對keyword類型有效;
到此,關于“elasticsearch的DSL查詢方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。