Сфинкс поисковый рейтинг нарушен? - PullRequest
0 голосов
/ 14 ноября 2011

Кто-нибудь когда-нибудь получал варианты рейтинга Сфинкса?Я прочитал руководство и книгу, но не могу заставить работать рейтинг вообще.Из того, что я понимаю, ранжирование просто вычисляет вес по-другому, не выполняет никакой сортировки.Мои результаты отсортированы по @weight (внутреннее поле sphinx) и я использую расширенный режим сортировки, который вам необходим для этого, но не вижу никакой разницы между различными режимами ранжирования.Мой конфиг выглядит примерно так:

$cl->SetMatchMode( SPH_MATCH_EXTENDED2 );  
$cl->SetSortMode ( SPH_SORT_EXTENDED, "mylang DESC, @weight DESC, @id"); 

Ничто из этого не имеет значения:

$cl->setRankingMode(SPH_RANK_SPH04);
$cl->setRankingMode(SPH_RANK_PROXIMITY_BM25);

И веса одинаковы в обоих режимах.

В конечном итоге,я пытаюсь добиться того, чтобы термины, которые точно совпадали, были отсортированы по верху.Так, например, если поиск «Гарри Поттер» приводит к следующим результатам:

Harry Potter
Harry Potter and the potters
Harry Potter and the Prisoner of Azkaban
Harry Potter and the Deathly Hallows: Part 1

Это всего лишь пример, но первым должен быть результат, содержащий точный поисковый термин, а затемдругие будут следовать.Это не происходитУ кого-нибудь есть опыт с этим?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

У вас есть другие записи в индексе, кроме тех, которые начинаются с "Гарри Поттера"? Если нет, то фраза «Гарри Поттер» будет оштрафована по алгоритму ранжирования.

См. Мою статью об этом: Интересная вещь о BM25 в Sphinx Search

Все записи имеют точное совпадение с "Гарри Поттером", поэтому я предполагаю, что записи с большим количеством слов будут иметь более высокий рейтинг.

Решением может быть использование атрибута, который хранит размер записей в байтах:

sql_query = select field, length(field) as f_size from ....

Атрибут:

sql_attr_uint = f_size

Режим сортировки сфинксов:

$cl->SetSortMode ( SPH_SORT_ATTR_ASC, 'f_size' );

0 голосов
/ 16 ноября 2011

Оказывается, что SPH_RANK_SPH04 не включен в файл sphinxapi.php в версии 0.9.9 !!!Поэтому, даже если вы называете это, это не учитывается и, более того, не выдает ошибку.

Это ужасно, потому что затрудняет поиск и устранение неисправностей.

Я опубликовал это как ответ в надежде, что это поможет кому-то еще.Мы потеряли почти 2 дня, сходя с ума из-за этого, пока мы не поняли это.

Кроме того, в 2.0.1 есть ошибка, которая на самом деле не приводит к точным совпадениям, для этого вам нужна версия 2.0.2 (которую нужно получить из SVN) или выше, но ябыло бы очень утомительно использовать экспериментальные версии в производстве.

Надеемся, что разработчики Sphinx позаботятся об этом в ближайшее время.

PS Оглядываясь на дневники разработчиков, он говорит:

«Начиная с 1.10-бета Sphinx имеет 8 различных ранкеров»

Мы повысили с 0,9,9 до2.0.1 и, должно быть, оставил файл api позади, и в отчаянии я даже не проверял это.Было бы неплохо, чтобы Sphinx выдавал ошибку, если режим ранжирования не существует (как и в других режимах, таких как сопоставление), и ошибка 2.0.1 все еще существует, насколько мы можем судить в наших тестах.

...