Как правильно составить ранкер?

Приветствую.
Есть mysql-таблица с записями:
id artist          title
1  Валерий Меладзе Сэра 
2  Валерий Меладзе Сэра (слова Константина Меладзе)

Индексируется запросом sql_query = select id, artist, title from base
По запросу «валерий меладзе сэра» через SphinxClient вторая запись будет более релевантна, так как у нее дважды встречается «Меладзе», но это неправильно. Нужно, чтобы на первом месте были строки, которые более точно совпадают с запросом (в данном случае на первом месте должна оказаться id=1). В то же время по запросу «меладзе» релевантнее так же должна оказаться первая строка.
Подскажите, пожалуйста, как должен выглядеть ранкер решающий такую задачу?
Заранее благодарен.
С уважением.
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
tumbler
@tumbler
бекенд-разработчик на python
Без конфига индекса сложно сказать, но мне кажется, что у Вас в индексе два текстовых поля - артист и название песни. Точного совпадения нет ни с одним из них, но "общие последовательности слов" лучше всего ранжирует wlccs, а за длиной документа можно следить с помощью doc_word_count.

Т.е. общая идея - чем больше общая совпадающая подстрока - тем лучше, плюс штрафуем за длину документа.
OPTION ranker=expr('sum(wlccs*user_weight) * 100500 - doc_word_count * 42')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы