#elasticsearch #индексация #полнотекстовый_поиск #lucene
Какими средствами лучше всего организовать индексирование и поиск русских слов, которые являются записью английской транскрипции? Например, слово vision в русском варианте будет записано как вижн или вижен, но значение сути не меняется. Поиск, соответственно, должен быть произведен как по vision так и по вижн без потери результатов на выходе. Soundex и Metaphone, на сколько я понимаю, работают строго в одном языке без скрещиваний.
Ответы
Ответ 1
Мне кажется, в большинстве случаев, будет достаточно функционала синонимов. База данных, скорее всего, имеет определенную тематическую направленность, например медицина или электротехника. И чтобы настроить поиск с учетом транслита/звучания слов на разных языках достаточно заполнить 500-1000 синонимов. Но использовать анализатор с фильтром типа synonym не для индексации, а для анализа поискового запроса. Синонимы лучше вынести в отдельный файл, а не хранить в настройках. { "index" : { "analysis" : { "analyzer" : { "synonym" : { "tokenizer" : "whitespace", "filter" : ["synonym"] } }, "filter" : { "synonym" : { "type" : "synonym", "synonyms_path" : "analysis/synonym.txt" } } } } Пример содержимого файла synonym.txt: vision, вижн, вижен Если этого недостаточно, то получаем очень сложную задачу. Если дело ограничивается транслитом, то смотреть в сторону плагина ICU Transform Token Filter Если нет, и нужно vision, вижн, вижен для всех возможных слов, то смотреть в сторону машинного обучения. Это решение Rosette for Elasticsearch, видимо платное. Полезные ссылки. Обсуждение данной темы Rosette name translator - есть поддержка русского языка Soundex и Metaphone - это фонетические алгоритмы, работают, как вы написали, в одном языке. Это не то, что вам нужно.
Комментариев нет:
Отправить комментарий