#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
вместо. Спасибо за подсказку.