Elasticsearch - Специальные символы в строке запроса - PullRequest
0 голосов
/ 26 марта 2020

У меня проблемы с поиском специальных символов с использованием строки запроса. Мне нужно найти адрес электронной почты в формате "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

Это работает правильно. Моя проблема была где-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...