Запрос строки запроса с ключевыми словами и текстовыми полями в одном поиске - PullRequest
0 голосов
/ 19 апреля 2019

Обновление с Elasticsearch 5.x до 6.x.Мы широко используем запросы строки запросов и обычно конструируем запросы, в которых используются поля разных типов.

В 5.x следующий запрос работал правильно и без ошибок:

{
  "query": {
    "query_string": {
      "query": "my_keyword_field:\"Exact Phrase Here\" my_text_field:(any words) my_other_text_field:\"Another phrase here\" date_field:[2018-01-01 TO 2018-05-01]",
      "default_operator": "AND",
      "analyzer": "custom_text"
    }
  }
}

В 6.x этот запрос вернет следующую ошибку:

{
  "type": "illegal_state_exception",
  "reason": "field:[my_keyword_field] was indexed without position data; cannot run PhraseQuery"
}

Если я заключу фразу в скобки, а не в кавычки, поиск вернет 0 результатов:

{
  "query": {
    "query_string": {
      "query": "my_keyword_field:(Exact Phrase Here)",
      "default_operator": "AND",
      "analyzer": "custom_text"
    }
  }
}

Я думаю, это потому, что существует конфликт между тем, как анализатор определяет входящий запрос, и тем, как данныехранится в поле ключевого слова, но фраза (my_keyword_field:"Exact Phrase Here") сработала в 5.x.

Это больше не поддерживается в 6.x?А если нет, каков путь миграции и / или хороший обходной путь?

1 Ответ

0 голосов
/ 19 апреля 2019

Было бы лучше перефразировать запрос, используя разные типы запросов, доступные для разных вариантов использования. Например, используйте термин запроса для точного поиска по полю ключевого слова. Используйте запрос диапазона для диапазонов и т. Д.

Вы можете перефразировать запрос, как показано ниже:

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "my_text_field:(any words) my_other_text_field:\"Another phrase here\"",
            "default_operator": "AND",
            "analyzer": "custom_text"
          }
        },
        {
          "term": {
            "my_keyword_field": "Exact Phrase Here"
          }
        },
        {
          "range": {
            "date_field": {
              "gte": "2018-01-01",
              "lte": "2018-05-01"
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...