Поиск без учета регистра в ElasticSearch?

#elasticsearch

#elasticsearch

Вопрос:

Я столкнулся с проблемой поиска по электронной почте. Электронное письмо имеет тип ключевого слова. Некоторые пользователи добавляют электронное письмо с заглавными буквами, поэтому я не могу выполнить поиск по всем из них с помощью конструкции term. Локально я попытался изменить ключевое слово на text, но возникла новая проблема. Пример: поиск по email@gmail.com — elastic разбивает это электронное письмо на несколько частей и возвращает неправильные результаты: email@site.com , new@gmail.com и т.д. Каков наилучший способ выполнить такой поиск с помощью elastic? (было бы лучше избегать полного переиндексации)

ElasticSearch 6.6.1

 "mappings": {
        "_doc": {
            "properties": {
                "email": {
                    "type": "text"
                }
  

Ответ №1:

Вам придется переиндексировать свой индекс (или добавить дополнительное поле с нечувствительным анализатором регистра и выполнить запрос по этому полю, удалить первое поле и переименовать fieldname, но, возможно, это будет немного сложнее). Действительно, как если бы вы могли добавить анализатор, закрывая и повторно открывая index, elastic придется переиндексировать старые данные.

Для анализатора нижний регистр должен быть в порядке в вашем случае.

     "analyzer":{
      "analyzer_lowcase":{
        "tokenizer":"keyword",
        "filter":"lowercase"
      }
  

Комментарии:

1. Не знаю, почему это не работает "Mapping definition for [email] has unsupported parameters: [analyzer : analyzer_lowcase]" . Поэтому я использую normalizer вместо. Спасибо за подсказку.