query_string не возвращает ожидаемый результат в ES 7.7 - PullRequest
0 голосов
/ 05 августа 2020

Недавно я обновил Elasticsearch с 5.5 до 7.7. При запуске своего набора тестов автоматизации я обнаружил, что query_string в ES 5.5 возвращает мне ожидаемые документы, а ES 7.7 возвращает пустые результаты. Я заметил эту проблему только при поиске по нескольким словам, когда термин присутствует в разных полях документа. Взгляните на мой пример ниже:

Мой проиндексированный документ выглядит так, как показано ниже

{ field1: "Hello Nik", field2: "NYC" }

_mappings:

"field1" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }

Такое же сопоставление есть для field2.

Мой фрагмент запроса:

"query_string": { "query": "Hello NYC", "default_operator": "AND" }

Вышеупомянутый запрос отлично работает с ES 5.5 и успешно получает результат. Но в ES 7.7 выше запрос не может искать конкретный документ и возвращает пустой результат.

Не могли бы вы предложить, почему ES 7.7 не возвращает ожидаемый результат? Есть ли изменения в поисковом запросе al go?

1 Ответ

1 голос
/ 05 августа 2020

Предупреждение, относящееся к query_string, как указано в официальной документации

query_string query возвращает ошибку для любого недопустимого синтаксиса, это не рекомендуется использовать запрос query_string для окон поиска. Обратитесь к этому, чтобы узнать больше об этом.

Ниже приведены различные способы реализации поискового запроса для тех же данных (как указано в вопросе)

Поисковый запрос с использованием query_string:

{
    "query": {
        "query_string" : {
            "query" : "Hello AND NYC",
            "fields": ["field1", "field2"]
        }
    }
}

Поисковый запрос с использованием simple_query_string:

{
  "query": {
    "simple_query_string" : {
        "query": "Hello NYC",
        "fields": ["field1", "field2"],
        "default_operator": "and"
    }
  }
}

Поисковый запрос с использованием multi_match:

{
      "query": {
        "multi_match" : {
          "query":      "Hello NYC",
          "type":       "cross_fields",
          "fields":     [ "field1", "field2"],
          "operator":   "and" 
        }
      }
    }

Поисковый запрос с использованием bool query:

{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "Hello NYC",
            "fields": ["field1","field2"],
            "type": "cross_fields",
            "operator": "AND"
          }
        }
      ]
    }
  }
}

Результат поиска:

"hits": [
      {
        "_index": "my-index",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.87546873,
        "_source": {
          "field1": "Hello Nik",
          "field2": "NYC"
        }
      }
    ]

Обновление 1:

Поисковый запрос:

{
  "query": {
    "query_string": {
      "query": "Hello AND NYC"
    }
  }
}
...