1

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

以前,当搜索“qdsssq”时,我的搜索引擎什么也找不到。升级到 v7 后,类似的查询几乎返回结果。即使我删除should了查询的所有子句,我也会得到很多结果。但是,评分似乎仍然有效,并且我输入了似是而非的查询,我确实首先获得了最相关的结果(但即使是不匹配的结果也是如此)。你能帮我找出问题吗?

这是我在 elasticsearch v5 上触发的一个查询示例,它产生了预期的结果(现在似乎最终在 ESv7 上返回了整个数据库)。为简单起见,我只包含了一个should用于 FR/EN 的

{
  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
}

我是否错过了一些可以解释这一点的重大变化?过滤器上下文的删除(不太确定这意味着什么)是否相关?如何修复我的查询,使根本不匹配的结果不包含在结果中?

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

4

1 回答 1

1

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

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

您可能还会发现此答案很有帮助。

于 2019-11-08T10:26:11.320 回答