Elasticsearch: как работает поиск при использовании комбинации анализаторов? - PullRequest
1 голос
/ 26 мая 2020

Я новичок в Elasticsearch (ES), возился с анализаторами. Как указано в документации , в анализаторе можно указать «время индекса» и «время поиска», в зависимости от варианта использования. В моем документе есть текстовое поле title, и я определил следующее сопоставление, которое вводит подполе custom:

PUT index/_mapping
{
  "properties": {
    "title": {
      "type": "text",
      "fields": {
        "custom": {
          "type": "text",
          "analyzer": "standard",
          "search_analyzer":"keyword"
        }
      }
    }
  }
}

Итак, если у меня есть текст: "email-id is someid@someprovider.com", standard-analyzer будет анализировать текст на следующие токены во время индексации: [email, id, is, someid, someprovider.com].

Однако всякий раз, когда я пытаюсь выполнить запрос в поле (с различными вариантами условий запроса) title.custom, это не приводит к совпадениям.

Это то, что, как мне кажется, происходит, когда я запрашиваю ключевое слово: email:

  1. Оно анализируется анализатором ключевых слов.
  2. Заголовок поля Значение .custom также анализируется анализатором ключевых слов (анализ токенов), в результате получается такой же набор токенов, как упоминалось ранее.
  3. Точное совпадение должно произойти на email токене, возвращающем документ.

Очевидно, что это не так, и в моем понимании есть пробелы.

  • Я хотел бы знать, что именно происходит во время поиска.
  • На общем c level, хотелось бы знать, как происходит анализ и поиск при указании комбинации поиска и анализатора индекса.

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

search_analyzer установлен в "ключевое слово" для title.custom, поэтому вся строка работает как одно ключевое слово поиска.

Итак, чтобы найти совпадение в title.custom, необходимо выполнить поиск для "email-id someid@someprovider.com", а не его часть.

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

0 голосов
/ 26 мая 2020

Хороший вопрос, но для простоты позвольте мне объяснить один за другим различные варианты использования:

Анализаторы играют роль, основанную на

  1. Тип запрос (совпадение анализируется, в то время как термин не анализируется запросом).
  2. По умолчанию, если запрос анализируется как запрос сопоставления, он использует тот же анализатор для поискового термина, который используется в поле, которое используется во время индекса.
  3. Если вы переопределите поведение по умолчанию, указав search_analyzer в поле, которое во время запроса этот анализатор используется для создания токенов, которые будут сопоставляться с сгенерированными токенами, зависит от анализатора (Standard - анализатор по умолчанию).

Теперь, используя три вышеупомянутых пункта и объяснение API , вы можете выяснить, что происходит в вашем случае.

Дайте мне знать, если вам нужна дополнительная информация, и мы будем рады объяснить ее.

Сопоставление с разницей в запросе термина и Анализ API для просмотра токенов тоже будет полезно.

...