【问题标题】:Combining filter and must in elasticsearch在弹性搜索中结合过滤器和必须
【发布时间】:2021-02-04 10:08:06
【问题描述】:

在 must 中添加查询过滤器与分别使用查询过滤器和 must 有什么区别?

我需要对搜索应用过滤查询,但是这两个查询中的任何一个对我来说都是一样的。我想知道有什么不同。

案例一:

  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "field": {
              "value": "VALUE"
            }
          }
        },
        {
          "bool": {
            "filter": [
              {
                "script": {
                  "script": {
                    "source": """
                  return true;
                  
                """
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }

案例 2:

  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "field": {
              "value": "VALUE"
            }
          }
        }
      ],
      "filter": [
              {
                "script": {
                  "script": {
                    "source": """
                  return true;
                  
                """
                  }
                }
              }
            ]
    }
  }

在我看来它们没有区别,但我需要参考。问候。

【问题讨论】:

    标签: elasticsearch elasticsearch-5 elasticsearch-dsl


    【解决方案1】:

    它们的工作方式完全相同,第二个是首选语法,因为它不像第一个那样嵌套并且更易于阅读。

    【讨论】:

      【解决方案2】:

      两个查询的工作方式完全相同

      请参阅boolean query 上的文档以了解有关您的结构的更多信息

      必须:子句(查询)必须出现在匹配的文档中,并且将 贡献分数。

      filter:子句(查询)必须出现在匹配的文档中。然而 不像必须查询的分数将被忽略。过滤子句是 在过滤器上下文中执行,这意味着评分被忽略并且 子句被考虑用于缓存。

      您的第一个查询的结构,其中组合了多个 bool 查询:

      {
        "query": {
          "bool": {
            "must": [
              {
                "term": {},
                "bool": {
                  "filter": {
                    "script": {}
                  }
                }
              }
            ]
          }
        }
      }
      

      包含单个布尔查询的第二个查询的结构:

      {
        "query": {
          "bool": {
            "must": [
              {
                "term": {}
              }
            ],
            "filter": [
              {
                "script": {}
              }
            ]
          }
        }
      }
      

      如您所见,在两个搜索查询中,只有在同时满足术语查询和脚本查询条件时,文档才会匹配

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        相关资源
        最近更新 更多