【问题标题】:After upgrading to Elasticsearch v7, queries return all results升级到 Elasticsearch v7 后,查询返回所有结果
【发布时间】:2020-03-02 10:34:47
【问题描述】:

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

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

这是我在 elasticsearch v5 上触发的查询示例,它产生了预期的结果(现在似乎最终在 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

【问题讨论】:

    标签: elasticsearch elasticsearch-5 elasticsearch-7


    【解决方案1】:

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

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

    您可能还会发现this answer 很有帮助。

    【讨论】:

    • 嘿,我尝试在我的两个 bool 语句中添加此规则,但是当我在嵌套的 bool 语句中添加 minimum_should_match 时,似乎我现有的大多数规范都开始崩溃。似乎只在第一个 bool 子句中添加最小值应该匹配 1 解决了我的问题。知道为什么吗?
    • 它究竟是如何崩溃的? “规范”是什么意思?
    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多