Query DSL
Elasticsearch 提供了一種基于JSON 的查詢 DSL (Domain Specific Language) 來定義查詢。可以把查詢 DSL 看作是查詢的 AST(Abstract Syntax Tree),由兩種類型的子句組成:
葉子節點查詢: 葉子查詢子句在特定字段中查找特定值,例如 match
,term
,range
查詢。這類查詢可以單獨使用
復合查詢子句: 復合查詢可以包裹 葉子節點查詢 或者 復合查詢子句,用于組合多個查詢( bool
,dis_max
)或改變查詢行為(constant_score
)。
一、Query and filter context
分別描述了什么是 相關性評分(Relevance scores)、相關性查詢(Query context)、過濾查詢(Filter context)
Filter context:
- 在
bool
中的filter
、must_not
- 在
constant_score
中的filter
filter
聚合
二、Compound queries
復合查詢
2.1 Boolean
用于組合 must
,should
,must_not
,filter
,查詢,其中 must
,should
作為相關性查詢,must_not
,filter
作為過濾查詢,不參與評分
2.2 Boosting
調整 相關性評分的查詢,不調整 positive
匹配文檔的評分,降低 negative
匹配文檔的評分降低倍數 由 negative_boost
[0 -1.0]參數決定
2.3 Constant score
通過 constant_score
查詢返回的文檔都具有相同的評分,評分為 boost
所給定的值
GET /_search
{"query": {"constant_score": {"filter": {"term": { "user.id": "kimchy" }},"boost": 1.2}}
}
2.4 Disjunction max
queries
中包含多個查詢,取其中 最高的相關性評分 評分作為文檔的相關性評分,或取 最高的相關性評分 加上 其他經過調整的查詢結果的相關性評分 作為文檔的相關性評分。
queries
: 包含多個查詢字句,返回的文檔匹配一個或多個查詢字句
tie_breaker
: 調整除 最高的相關性評分 以外的其他相關性評分的系數
2.5 Function score
使用 function_score
可以修改查詢檢索到的文檔的得分。