У меня проблемы с поиском специальных символов с использованием строки запроса. Мне нужно найти адрес электронной почты в формате "xxx@xxx.xxx". Во время индекса я использую пользовательский нормализатор, который обеспечивает строчную и ascii-складку. Во время поиска я использую пользовательский анализатор, который предоставляет токенайзер для пробелов и фильтр, который применяет свертывание в нижнем регистре и ascii. Кстати, я не могу найти простой адрес электронной почты.
Это мое отображение
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1,
"analysis": {
"analyzer": {
"folding": {
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
},
"normalizer": {
"lowerasciinormalizer": {
"type": "custom",
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings": {
"properties": {
"id": {
"type": "integer"
},
"email": {
"type": "keyword",
"normalizer": "lowerasciinormalizer"
}
}
}
И это мой поисковый запрос
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "pippo@pluto.it",
"fields": [
"email"
],
"analyzer": "folding"
}
}
]
}
}
}
Поиск без спецсимволов работает нормально. Infact, если я делаю «query»: «pippo *» я получаю правильные результаты. Я также проверил токенизатор, выполнив
GET /_analyze
{
"analyzer": "whitespace",
"text": "pippo@pluto.com"
}
Я получил то, что ожидал
{
"tokens" : [
{
"token" : "pippo@pluto.com",
"start_offset" : 0,
"end_offset" : 15,
"type" : "word",
"position" : 0
}
]
}
Есть предложения? Спасибо.
Редактировать: я использую эластичный поиск 7.5.1
Это работает правильно. Моя проблема была где-то еще.