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
可以修改查询检索到的文档的得分。