Всем привет, кто знает как лучше реализовать поиск с учетом русского, английского языков (тобиж нескольких), и применения синонимов, nGram фильтра итд.
Стоит ли выделить анализатор для языков/синонимов/nGram отдельно (и применять их на этапе индексации к мультифилду) или
использовать их комбинацию в филтрах в одном/нескольких анализаторах?
Я бы начал с изучения Definitive Guide, после этого поискал бы по этому форуму. Этот вопрос тут уже несколько раз обсуждался. Если будут какие-нибудь конкретные вопросы - то спрашивайте.
использовать их комбинацию в филтрах в одном/нескольких анализаторах?
nGram и стеммниг в одном анализаторе не уживаются, но синонимы можно использовать и в том и в другом анализаторе. Только при nGram синонимы будут хорошо работать только при индексировании.
Режим cross_field не рассчитан на работу с полями, использующими разные анализаторы. Посмотрите вот это разъяснение в докумнтации. Там же есть пример, как с этим бороться.
Да это известная проблема с многословными синонима. Проблема тут:
Когда запрос обрабатывается, elasticsearch думает, что серый и color - это одно и тоже слово потому, что у них одна и та же позиция. В результате, он генерирует вот такой запрос:
Если мы это запрос перепишем с AND и OR, то получим
(title.raw:unit OR body.raw:unit) AND
(title.raw:сер OR title.raw:color OR body.raw:сер OR body.raw:color) AND
(title.raw:benetton OR body.raw:benetton)
Эту проблему можно решить заменив многословные синонимы на однословные как-то так:
Да, круто!
Я подозревал что то не то с синонимами, пробовал и так и сяк, но только вы указали на одинаковый position.
Я смотрел в сторону synonym_graph но варнинги в доке "This functionality is experimental .." испугали меня.
Спасибо большое.
У вас с search_analyzer стеммер используется. Это может привести к странным результатам. По-хорошему, там должен быть такой-же анализатор, что и при индексировании, но без edgeNGram фильтра. То есть, если вы индексировали с
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.