После обновления до Elasticsearch v7 запросы возвращают все результаты

Я пытаюсь обновить свой кластер 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
}

Я пропустил какое-то критическое изменение, которое могло бы объяснить это? удаление контекста фильтра (не совсем уверен, что это значит) related ? Как я могу исправить свой запрос, чтобы результаты, которые вообще не совпадают, не включались в результаты?

Я использую - Elasticsearch v7.1 на AWS - Ruby gem elasticsearch-7.3.0


person Cyril Duchon-Doris    schedule 06.11.2019    source источник


Ответы (1)


Да, это связано с удалением контекста фильтра, о котором вы говорили.

Попробуйте установить minimum_should_match: 1 в обоих запросах bool.

Вы также можете найти этот ответ полезным.

person Nikolay Vasiliev    schedule 08.11.2019
comment
Эй, я пытался добавить это правило в оба своих оператора bool, но кажется, что большинство моих существующих спецификаций начинают давать сбой, когда я добавляю Minimum_should_match во вложенный оператор bool. И кажется, что добавление минимума должно соответствовать 1 только в первом предложении bool, решило мою проблему. Любая идея, почему? - person Cyril Duchon-Doris; 13.11.2019
comment
Как именно вылетает? И что вы имеете в виду под спецификацией? - person Nikolay Vasiliev; 13.11.2019