Задача — создать поиск с идеальной релевантной выдачей, конечно же :)
С распределением весов по полям всё понятно, но как распределять веса по wordforms? Необходимо выдавать сначала директоров, а потом уже начальников при соответствии «Директор => Начальник».
Т.е. можно ли раздавать разные веса в зависимости от того, оригинальный ли запрос, или это подобранный синоним?
К сожалению это невозможно. В процессе индексации, слова получат одинаковые CRC32 коды, т.е. в индексе представление слова Директор и Начальник будет идентичным. На оффициальном сайте есть страница документации по wordforms,
но там, увы, это подробно не расписано.
нет, по той же самой причине, сфинкс не содержит в индексе никаких слов, только CRC32 коды каждого слова.
Ваш пример для сфинкса будет выглядеть так: @title (Начальник)[1000] | (Директор)[10]
или так: @title (Директор)[1000] | (Директор)[10]
или даже так: @title (Начальник)[1000] | Начальник)[10]
Напомню сфинкс не работает(и не хранит в индексе слова) он работает только с CRC32 кодами!
Прошу прощения, под реализацией логики я имел ввиду, что от wordforms мы при этом отказываемся. Т.е. реализовываем синонимизацию на уровне построения длинного запроса и распихиваем (гипотетически, потому что я не знаю, возможно ли это) веса по кускам запроса.
Если я смогу так сделать, я буду счастливым человеком :)
Я бы ввел дополнительное поле-флаг, указывающее на директора или начальника (скажем, 1 и 2), а потом назначил бы его как наиболее весомое при расчете релевантности. Тогда получилось бы, что директора всегда сверху.