Синонимы в SOLR – заметки на бегу

Written by elwood

Прочёл статью http://nolanlawson.com/2012/10/31/better-synonym-handling-in-solr/. И есть некоторые мысли по этому поводу.

Парень пишет что можно включать SynonymFilterFactory на query и index. В query не работают синонимы из нескольких слов и неправильно бустятся документы, содержащие редкие синонимы (которые по идее должны быть внизу). А в index – ну понятно, распухает индекс, плохо ищется всё и подсветка лагает. Дока по солру таки-рекомендует юзать путь через index. В общем ему пришлось патчить query-парсер чтоб заработали синонимы из нескольких слов.

Моё мнение – в index нельзя врубать синонимы, потому что это концептуально неверно, и порет содержимое документов. Думаю, это в общем довольно сильно портит релевантность, и странно, что этот момент он не описал. Синонимы должны отрабатывать на query, конечно. То, что не пашут синонимы из нескольких слов – это баг солра, должно настраиваться так, чтобы такие синонимы тоже работали. Но в принципе этой штукой можно пренебречь, так как синонимов из 2 слов не больно и много (мы ж не Яндекс делаем). Плюс, он почему-то в качестве синонимов приводит странный пример “собака-дворняга” ну это какбэ не больно и синонимы. Синонимы в солре в моем понимании это вещи, которые на 99% эквивалентны. Айфон и iPhone. И для них проблема буста отпадает. А вообще для решения проблемы с бустом редких синонимов можно применить приём – скопировать поле в поле_exact и добавить по нему дополнительный вес. То есть если запрос точно совпадает с содержимым документа, этот документ будет выше. Соответственно, все синонимичные доки будут ниже, что и требуется.

Так что всё норм. Надо только научить солр парсить синонимы-фразы из запроса. Но в нашем случае даже это не нужно. А вот что реально нужно – учёт словоформ (стемминга) – почему-то у него не отражено в статье. Но в принципе у меня стоит стеммер по словарю OpenOffice + стеммер лайтовый, и он умеет понимать, что “айфонов” == “айфон” == “iPhone”.