Elasticsearch Query DSL学习和理解
Elasticsearch的Query DSL分类
-
叶子Query语句
在特定的字段中检索特定的关键词,比如match, term, range等。
-
组合Query语句
-
通过逻辑关系运算将叶子Query语句或者组合Query语句再组合。比如bool, dis_max。
-
改变叶子Query语句或者组合Query语句的行为。比如constant_score。
-
检索DSL上下文
-
Query
Query上下文解决的是"How well does this document match this query clause?"的问题,会计算文档和关键词的相关性打分。如果在DLS中有query关键字,则说明是一个Query上下文。
-
Filter
Filter上下文解决的是"Does this document match this query clause?"的问题。不会计算相关性打分,只会判断yes或者no。如果在DSL中有filter关键字,则说明是一个Filter上下文。
组合语句的种类
-
bool 检索
常用组合Query语句的关键字,包含must, should, must_not, filter四种逻辑关系。其中,must和should将子query的打分混合运算得到最终得分,而must_not和filter则作为Filter上下文来过滤文档。
- must: 每个命中文档必须满足query语句条件,并且进行打分。
- filter: 每个命中文档必须满足query语句条件,不进行打分,但语句会考虑缓存。
- should: 每个命中文档最好包含query语句条件,会参与打分。minimum_should_match可以控制should子句的最少命中条数。没有must或filter时,默认值为1。否则,默认值为0。
- must_not: 每个命中的文档必须不满足query语句条件,在filter上下文执行,不进行打分,但语句会考虑缓存。
-
boosting 检索
主要用来将命中positive子句的文档返回,同时将命中negative子句文档的打分降低。包含postitive,negative,negative_boost关键字。
- positive: 命中的文档必须满足的query语句条件。
- negative: positive条件命中的文档,根据该条件判断是否要降低打分。
- negative_boost: 降低打分的系数,取值范围0 - 1。
-
constant_score 检索
针对filter语句,返回固定打分的命中文档。包含两个关键字filter, boost。
- filter: 过滤子句
- boost: 命中文档的打分
-
dis_max 检索
返回命中至少一个字句的文档。如果一个文档命中了多个字句,则最终打分由最高分和其他分*tie_breaker的和来决定。包含两个关键字queries, tie_breaker
- queries: 一个或多个子句,返回文档必须命中至少一个子句。如果命中多个,最终得分使用子句中打分的最高分。
- tie_breaker: 命中多个子句时,非最高分子句作为增量,乘以该系数后叠加上去。
-
function_score 检索
主要用来对命中的文档进行打分。包含query关键字和一个或多个function。每个命中的文档都会由打分函数来计算分数。
- functions: function_score支持由functions来指定多个函数。
- score_mode: 指定怎么将每个函数的打分综合计算。
- weight: 因为不同function的打分不是归一化的,或者想单独对某个function的打分进行修改,weight就可以作为归一化或者修改的系数。如果weight独立于function出现,则直接作为一个函数,返回weight的值最为该函数的打分。
- max_boost: 最终打分的最大值。
- min_score: 返回的文档需要满足打分大于该值。
- boost_mode: 指定怎么将一个命中文档在query context计算的得分和函数计算的得分合并。

浙公网安备 33010602011771号