查询
在es中可以通过简单的查询直接返回结果如单一的match,也可以通过组合、包裹不同的单一复杂查询组装复合查询。
查询在不同的上下文中会有不同的作用。
上下文
查询结果默认根据相关度评分排序,在返回结果中为_score,得分越高,表明与查询越吻合,但是在查询过程中分为了query上下文与filter上下文,在不同上下文中计算得分不同
query
查询语句中除开filter部分
filter
查询语句中得filter部分、bool中得must_not,匹配不会得分,但是可以使用constant_score包裹filter满足条件时返回给定值,如下所示
GET /_search
{
"query": {
"constant_score" : {
"filter" : {
"term" : { "user" : "kimchy"}
},
"boost" : 1.2 //默认为1.0
}
}
}
频繁使用的filter会被es缓存以提高速度
组合查询
通过组合多个组合查询或者单项查询将结果汇集得复杂查询,主要由以下几类
bool
包含must、must_not、filter、should,其中must与should会产生得分,should可以根据minimum_should_match值确定满足条件个数决定是否返回文档(即should条件满足值>=minimum_should_match时表明文档符合查询),当must与filter不存在时默认值为1,其他为0
boosting
分为positive、negative,通过满足positive计算原始得分,再减去满足nagative得数量*negative_boost(扣分常量值0-1)
constant_score
包裹filter,使得filter可以参与相关度得分
dis_max
多个查询,如果一个文档满足多个条件,得分采用最高查询得,可以设置tie_breaker值在满足多个查询时额外增加得分
function_score
还不清楚
全文查询
intervals
7.0加入,控制term顺序查询数据
带详细了解
match
使用分词精确或者模糊查询,可以设定为and还是or以及or时需要满足得个数
match_bool_prefix
不是很明白
match_phrase
将给定条件直接当作完整词使用,不分词,即只有文档包含给定短语才返回
match_phrase_prefix
与match_phrase一致只是最后一个词用作左模糊匹配
multi_match
多个字段参与查询,得分与查询方式根据类型决定
best_fields:返回匹配度最高字段得得分
most_fields: 得分求平均值
phrase and phrase_prefix :得分与best_fields,只是查询方式不一致了
term(全匹配)
exists
获取给定字段内容创建了倒排索引得文档
fuzzy
模糊查询,可以设定一系列参数改变模查询行为规则待研究
ids
查询id在给定列表中的文档
prefix
左模糊查询
range
范围查询,relation属性待研究

浙公网安备 33010602011771号