Ответ 1
Вам нужно понять, как работают анализаторы elasticsearch. Анализаторы выполняют токенизацию (разделяют ввод на кучу токенов, например, на пробелы) и набор фильтров токенов (отфильтруйте маркеры, которые вы не хотите, например остановить слова или изменить токены, например нижний регистр токенов, который преобразует все в нижний регистр).
Анализ выполняется в два очень специфических раза - во время индексации (когда вы помещаете материал в elasticsearch) и, в зависимости от вашего запроса, во время поиска (в строке, которую вы ищете).
Тем не менее, анализатор по умолчанию является стандартным анализатором, который состоит из стандартного токенизатора , стандартный фильтр токенов (для очистки токенов от стандартного токенизатора), нижний фильтр токена и остановить токеновый фильтр.
Чтобы привести это в пример, когда вы сохраняете строку "Я люблю пирог Винсента!" в elasticsearch, и вы используете стандартный анализатор по умолчанию, вы на самом деле сохраняете "i", "love", "vincent", "s", "pie". Затем, когда вы пытаетесь найти "Vincent's" с запросом term
(который не анализируется), вы ничего не найдете, потому что "Винсент" не является одним из этих жетонов! Однако, если вы ищете "Vincent's", используя запрос match
(который проанализирован), вы найдете "Я люблю пирог Винсента!". потому что "vincent" и "s" находят совпадения.
В нижней строке:
- Используйте анализируемый запрос, например
match
, при поиске строк естественного языка. - Настройте анализаторы в соответствии с вашими потребностями. Вы можете настроить настраиваемый анализатор, который выполняет токенизатор пробела или буквенный токенизатор или токенатор шаблона, если вы хотите усложниться, а также любые фильтры, которые вам нужны. Это зависит от вашего варианта использования, но если вы имеете дело с предложениями на естественном языке, я не рекомендую это, потому что стандартный токенизатор был создан для поиска естественного языка.
-
Вы можете настроить поле, чтобы не использовать анализатор со следующим отображением, которое должно соответствовать вашим потребностям:
"visitor": { "properties": { "id": { "type": "string" "index": "not_analyzed" } } }
Подробнее см. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html.