Как повлиять на вес результата Сфинкса - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть похожий вопрос здесь: Не найден ли рейтинг поиска Sphinx? , но я подумал, что попрошу более простую версию, чтобы узнать, получил ли я какие-нибудь хиты.

Кто-нибудь знает, как повлиять на веса в результатах поиска Sphinx? Специально для точных совпадений.

Я знаю, что изменение режима ранжирования дает вам разные весовые шкалы, но большинство ударов, которые я получаю, имеют одинаковый вес, например, поиск "единожды" приводит к унизительным результатам, таким как:

"once we were warriors" weight = 1637
"once" weight = 1637
"Once upon a time in the west" weight = 1637

Конечно, по крайней мере, первый должен иметь другой вес, поскольку он точно соответствует.

Если биться с этим пару дней, любая помощь будет очень кстати.

Ответы [ 5 ]

2 голосов
/ 21 ноября 2011

Вопрос такого же типа задавался на форуме Sphinx .

$cl->setMatchMode(SPH_MATCH_EXTENDED);
$cl->setRankMode(SPH_RANK_WORDCOUNT);

$cl->Query('"^public work place$ | "public work place" | (public work place) | "public work place"/1 | (*public* *work* *place*)',$index);

Это работает для меня, и сначала получаем точное совпадение, а затем фразу и т. Д.

ПРИМЕЧАНИЕ: здесь вместо получения другого веса порядок результатов устанавливается в соответствии с предоставленным запросом. Я думаю, что лучше получить результат без изменения веса, который потребует больших вычислений и в конечном итоге сэкономит время и деньги. : -)

Это работает в моей системе и проверено (Sphinx 0.9.9-release -r2117).


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

Я только что проверил SPH_RANK_SP04 с такими вещами, похоже, работает.

Я обновил этот инструмент тестирования, чтобы использовать sphinx 2.01 (чтобы SPH04 был доступен)

http://www.nearby.org.uk/sphinx/searchtest.php?q=one&ranking=7

обратите внимание, что «один» сам по себе получает максимально возможный вес.

0 голосов
/ 20 февраля 2014

Я столкнулся с той же проблемой с модулем PECL Sphinx, и я думаю, что решил эту проблему путем определения отсутствующих констант:

define ( "SPH_RANK_PROXIMITY", 4 );
define ( "SPH_RANK_MATCHANY", 5 );
define ( "SPH_RANK_FIELDMASK", 6 );
define ( "SPH_RANK_SPH04", 7 );
define ( "SPH_RANK_EXPR", 8 );
define ( "SPH_RANK_TOTAL",9 );

Надеюсь, эта помощь.

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 все еще существует, насколько мы можем судить в наших тестах.

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