@sps1735

Как в Sphinx учитывать ctr при поиске?

Имеется база с полями id, title, description и ctr (тип float). ctr=clicks/impressions и пересчитывается раз в минуту.
indexer --all --rotate запускается каждые 10 минут.

sphinx.conf
sql_query = SELECT id, title, description, ctr FROM posts
sql_attr_float = ctr

Запрос делаю на sphinxQL
$sphinx_sql = " SELECT * FROM sphinxdata WHERE  MATCH ('\"$search_key\"/1') LIMIT 500 OPTION ranker=proximity_bm25 ";

Потом получаю список $ids и достаю остальные данные
$sql = " SELECT * FROM posts WHERE id IN ($ids) ";

Как мне в запросе $sphinx_sql учитывать ctr? Т.е. чтобы результаты были примерно ORDER BY (ctr*weight) DESC, где weight это вес который вычисляет sphinx.
  • Вопрос задан
  • 2850 просмотров
Пригласить эксперта
Ответы на вопрос 2
@portfelio
Эм... Так в чем проблема то?

SELECT *, ctr*WEIGHT() AS super_ctr FROM data WHERE MATCH('some') ORDER BY super_ctr DESC;
Ответ написан
Комментировать
@sps1735 Автор вопроса
@portfelio спасибо. Так и делал. Оказалось что надо было обновить 2.0.8 до 2.1.5 вручную. Там какой-то баг с ORDER BY поправили.

И еще вот это запрос неправильный был:
$sql = " SELECT * FROM posts WHERE id IN ($ids) ";
Надо:
$sql = " SELECT * FROM posts WHERE id IN ($ids) ORDER BY FIELD(id, $ids) ";


Я правильно понимаю, что сортировка по super_ctr происходит после того как данные и weight получены?
А для того чтоб ctr учитывать при получении данных надо переписывать формулу в OPTION ranker=
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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