Как выполнить поиск без учета регистра в поле ключевого слова в Elasticsearch без переиндексации? - PullRequest
1 голос
/ 07 августа 2020

У меня есть поле ключевого слова, подобное этому:

"address": {
   "type": "keyword"
}

Значение написано в верблюжьем регистре, так как оно предназначено для отображения. например, "1/10 Somewhere Rd, Somewhere AAA 3333"

Теперь я хочу выполнить поиск без учета регистра в этом поле, в идеале без переиндексации всего индекса .

До сих пор я обнаружил, что match можно использовать для поиска без учета регистра, но работает только с полями text.

Единственный мой вариант - переиндексировать, например, через поле text или с помощью строчного / настраиваемого нормализатора / анализатора? В любом случае я могу сделать это без переиндексации?

1 Ответ

0 голосов
/ 07 августа 2020

Вы правы, что match запросы могут использоваться для поиска без учета регистра, поскольку он применяет тот же анализатор, который использовался во время индексации, но работает только для поля text.

Проблема в том, что во время индексирования, поскольку вы использовали поле keyword, поэтому токены в инвертированном индексе elasticsearch, который используется для сопоставления токенов поискового запроса, не являются lowercased, поэтому невозможно обеспечить поиск без учета регистра.

Давайте разберемся в приведенном выше утверждении на примере:

Предположим, у вас есть Foo BAR в вашем документе, который вы проиндексировали с помощью поля keyword. Обратите внимание на регистр каждого символа , так что инвертированный индекс будет иметь токен ниже.

Foo BAR, теперь во время запроса каким-то обманом вы можете преобразовать поисковый запрос во все верхний или нижний регистр, но в этом случае он все равно не будет соответствовать токенам, поэтому у вас все равно будет много проблем с результатами поиска.

Я бы посоветовал добавить новое поле, в котором используется text и используя reindex API , создайте индекс fre sh и реализуйте его чистым способом , также используя API переиндексации, вы можете построить новый индекс из старого индекса, и его намного быстрее построить новый индекс, а не построение из источника истины (SQL в большинстве случаев).

...