升级到 Elasticsearch v7 后,查询 return 所有结果

After upgrading to Elasticsearch v7, queries return all results

我正在尝试升级我的集群 Elasticsearch v7,我的查询似乎 return 很多结果,即使是不可能的请求

以前,在搜索 "qdsssq" 时,我的搜索引擎什么也找不到。升级到v7后,类似查询returns的结果差不多。即使我删除了查询的所有 should 子句,我也会得到很多结果。但是,似乎评分仍然有效,并且我输入了合理的查询,我确实首先获得了最相关的结果(但甚至还有不匹配的结果)。你能帮我找出问题吗?

这是我在 elasticsearch v5 上触发的一个查询示例,它产生了预期的结果(并且似乎最终 return 现在在 ESv7 上对整个数据库进行了查询)。为了简单起见,我只为 FR/EN 添加了一个 should

{
  index: "profiles",
  type: nil,
  body: {
    query: {
      function_score: {
        query: {
          bool: {
            disable_coord: true,
            filter: {
              bool: {
                filter: [{
                  term: {
                    indexable: true
                  }
                }],
                should: [{
                  match_phrase: {
                    : "description.french" => {
                      query: "qdsssq",
                      boost: 1,
                      slop: 50,
                      analyzer: "french_heavy"
                    }
                  }
                }, {
                  match_phrase: {
                    : "description.english" => {
                      query: "qdsssq",
                      boost: 1,
                      slop: 50,
                      analyzer: "english"
                    }
                  }
                }]
              }
            },
            should: [{
              match_phrase: {
                : "description.french" => {
                  query: "qdsssq",
                  boost: 1,
                  slop: 50,
                  analyzer: "french_heavy"
                }
              }
            }, {
              match_phrase: {
                : "description.english" => {
                  query: "qdsssq",
                  boost: 1,
                  slop: 50,
                  analyzer: "english"
                }
              }
            }]
          }
        },
        functions: [],
        score_mode:: sum,
        boost_mode:: multiply
      }
    }
  },
  size: 12,
  from: 0
}

我是否遗漏了一些可以解释这一点的重大变化? the removal of the filter context(不太确定那是什么意思)相关吗?我该如何修正我的查询,使完全不匹配的结果不包含在结果中?

我正在使用 - AWS 上的 Elasticsearch v7.1 - Ruby gem elasticsearch-7.3.0

是的,这与您所指的过滤器上下文的删除有关。

请尝试在两个 bool 查询中设置 minimum_should_match: 1

您可能还会发现 有帮助。