запросasticsearch по нескольким полям для терминов с нечеткостью - PullRequest
0 голосов
/ 03 октября 2019

Я создаю поисковую систему бизнес-поиска для поиска информации о деловых контактах на основе введенного пользователем запроса. Информация для предприятий хранится в индексе эластичного поиска в следующей форме:

"_source" : {
          "id" : 53,
          "name" : "Judge Pouros",
          "email" : "roob.alberto@example.com",
          "phone" : "+1-783-850-2127",
          "created_at" : "02/10/2019 16:30",
          "updated_at" : "02/10/2019 16:30",
          "travel_agencies" : [
            {
              "id" : 1234,
              "abta" : "A1234",
              "name" : "The Example Travel Agency",
              "address_id" : 27,
              "email" : "zwillms@example.info",
              "comm_rate" : 14.0,
              "travel_agency_type_id" : 1,
              "address" : {
                "id" : 27,
                "line_1" : "Flat 52",
                "line_2" : "Flat 82i\nKaren Circles",
                "town" : "Kimberlyside",
                "county" : "Renfrewshire",
                "country_id" : 189,
                "postcode" : "SM3 9QR",
                "created_at" : "2019-10-02 16:31:01",
                "updated_at" : "2019-10-02 16:31:01",
                "country" : {
                  "id" : 189,
                  "code" : "MF",
                  "name" : "Saint Martin (French part)",
                  "translations" : [
                    {
                      "id" : 189,
                      "locale" : "en",
                      "country_id" : 189,
                      "name" : "Saint Martin (French part)"
                    }
                  ]
                }
              }
            }

Допустим, клиент ищет «пример путешествия в Ренфрушире». Я ожидаю, что вышеуказанный результат будет возвращен. В настоящее время я использую следующую строку запроса:

{
    "query": {
        "query_string": {
            "query": "*example*travel*renfrewshire*"
        }
    }
}

Но результаты не возвращаются. Я пытаюсь найти документы, содержащие термины в пользовательском запросе с нечеткостью, чтобы допустить неправильное написание.

Я думал о сопоставлении определенных терминов с нечеткостью, но я не знаю, какие терминыэтот пользовательский запрос может совпадать, поэтому мне нужно проверить все термины.

Есть ли более простой запрос, который будет выполнять это?

1 Ответ

2 голосов
/ 03 октября 2019

Поскольку вы хотите выполнить поиск по всему документу, я предлагаю использовать запрос с несколькими совпадениями .

. Он будет выполнять полнотекстовый поиск по предоставленным полям.

Вашзапрос будет выглядеть следующим образом:

{
  "query": {
    "multi_match" : {
      "query" : "example travel renfrewshire",
      "fields" : [ * ] 
    }
  }
}

Вы также можете определить нечеткость в запросе match / multi_match.

Для этого посмотрите документацию по нечеткости .

РЕДАКТИРОВАТЬ:

Как указано в документации:

, если поля не предоставлены, запрос multi_match по умолчанию равен index.query. настройки индекса default_field, которые в свою очередь по умолчанию *. * извлекает все поля в отображении, которые могут использоваться для запросов, и фильтрует поля метаданных. Все извлеченные поля затем объединяются для создания запроса.

вам даже не нужно будет задавать настройку полей, поскольку по умолчанию используется * (все подходящие).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...