Почему @ не соответствует запросу query_string вasticsearch? - PullRequest
1 голос
/ 14 марта 2019

У меня есть поле с идентификаторами электронной почты, когда я пытаюсь сопоставить весь идентификатор электронной почты, оно не соответствует документу, но когда я не включаю @, документ совпадает.Я попытался заменить @ на.и *, ни один из них не помог в сопоставлении.

Как мне сопоставить всю электронную почту?

Например, документ:

{
  ...
  "email": "sample@gmail.com"
}

Например, запрос об ошибке:

{
  "query": {
    "query_string": {
      "default_field": "email",
      "query": "*mple@gmail.c*"
    }
  }
}

Например, успешный запрос:

{
  "query": {
    "query_string": {
      "default_field": "email",
      "query": "*ample*"
    }
  }
}

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Как уже упоминалось Ричи в другом посте, здесь он не соответствует вашему поисковому запросу, так как по умолчанию в Elastic используется анализатор standard, который удаляет специальный символ из текста во время процесса токенизации.

Вам нужно выполнить следующие действия, чтобы это работало.

  1. Определить пользовательский анализатор, который использует UAX URL-токенайзер

  2. Используйте свой собственный анализатор в полях, где вы хотите, чтобы @ был доступен для поиска. Определите это в своей схеме ES.

  3. Проверьте O / P на http://localhost:9200/{your_index_name}/_mapping, где замените your_index_name на ваше индексное имя и убедитесь, что поля, которые теперь используются, настраиваемый анализатор.
  4. Переиндексируйте все данные, так как изменение анализатора поля является критическим изменением, и только после того, как вы переиндексируете все данные, с новым отображением тогда будут ожидаемые токены.
  5. Проверьте токены, созданные для ваших полей, используя _analyze api . и теперь он должен иметь токены, состоящие из @.

Дайте мне знать, если у вас возникнут какие-либо проблемы с реализацией этого.

0 голосов
/ 14 марта 2019

Да, поэтому из https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-uaxurlemail-tokenizer.html видно, что стандартный анализатор делает

POST _analyze
{
  "text": "Email me at john.smith@global-international.com"
}

до

[ Email, me, at, john.smith, global, international.com ]

, что анализатор uax_url_email делает

 [ Email, me, at, john.smith@global-international.com ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...