查询

在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属性待研究

posted @ 2021-03-31 11:51  犬犬呀  阅读(59)  评论(0)    收藏  举报