【问题标题】:Elastic Search Must vs Should vs ExcludeFilters弹性搜索必须与应该与排除过滤器
【发布时间】:2021-10-27 02:23:41
【问题描述】:

谁能详细说明弹性搜索中的这三个过滤器,即必须、应该、排除过滤器。 布尔查询的这些部分是否属于弹性搜索中的复合查询类别。

【问题讨论】:

    标签: elasticsearch filter


    【解决方案1】:

    must 与逻辑 AND 运算符相同,should 与逻辑 OR 运算符相同

    当您创建 DSL 查询时,这些子句用于组合多个条件(使用 bool query

    所有这些查询都包含在 bool 查询中。例如

    {
      "query": {
        "bool": {
          "must": {},
          "should": {},
          "filter": {}
        }
      }
    }
    

    更新 1:

    should(有助于相关性得分)这意味着当您使用 should 子句时,搜索结果会根据文档数、字段长度、频率、总词频等多种因素返回。

    而在filter 的情况下(不影响相关性得分),这意味着它只给出是/否的答案,即文档是否匹配。 (不考虑mustshould子句考虑的其他因素)

    【讨论】:

    • Does Filter 仅适用于 must 子句,即正在搜索的查询(子句)应该存在于文档中。假设您从电影弹性数据集中按标题搜索电影,因此过滤器的用例可以是在获得匹配的结果后,您希望只显示那些评分为 3 或更高的电影。理解正确吗?
    • { "query" : { "bool" : { "should": [{ "match": { "make": "Birdman" } }, { "match": { "make": “复仇者联盟” } }],“过滤器”:{“术语”:{“评级”:“5”} } } } }
    • @Aditya 过滤子句的作用类似于 must 子句。唯一的区别是filter 子句忽略了查询的分数,而must 子句则有查询的分数。并且没有必要与过滤子句一起使用必须子句
    • @Aditya 是的,在获得匹配结果后,如果您只想显示评分为 3 或以上的电影,则可以使用过滤子句
    • 除了这个常用的过滤器还有其他用例吗?
    猜你喜欢
    • 2019-06-20
    • 2017-09-10
    • 2021-02-04
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多