Sphinx возвращает несовместимый набор результатов в зависимости от сортировки - PullRequest
0 голосов
/ 16 января 2012

Я пытаюсь реализовать многоязычные индексы для разрабатываемого веб-приложения.На данный момент записи существуют на нескольких языках: английском, малайском и арабском (но они не разделены на разные столбцы) .В настоящее время включен только английский стеммер.

Построены только два индекса: для стволовых и неосновных индексов.У меня проблема с индексом стволовых данных, так как возвращаемый набор результатов является непоследовательным, в зависимости от столбца сортировки.

Эти два запроса (из индекса стволовых) каждый из них возвращает различное количество общих результатов., хотя разница между ними только в порядке сортировки.

SELECT * FROM test1stemmed WHERE MATCH('@institution universiti') GROUP BY art_id ORDER BY art_title_ord ASC;

SELECT * FROM test1stemmed WHERE MATCH('@institution universiti') GROUP BY art_id ORDER BY art_title_ord DESC;

Однако, если те же запросы были выполнены для индекса без основы, числа результатов равны.

IУ меня также та же проблема с PHP API Sphinx:

$sp = new SphinxClient();
$sp->SetServer('localhost', 9312);
$sp->SetMatchMode(SPH_MATCH_EXTENDED);
$sp->SetGroupBy('art_id', SPH_GROUPBY_ATTR, "$sp_sort_column $sort");
$sp->SetLimits($offset, $rows_per_page, 1000);
$sp->Query("$q", 'test1stemmed');

Что мне не хватает?

1 Ответ

0 голосов
/ 17 января 2012

То, что я упустил из документации здесь http://sphinxsearch.com/docs/2.0.2/clustering.html

ВНИМАНИЕ: группировка выполняется в фиксированной памяти и, следовательно, ее результаты являются только приблизительными; поэтому в total_found может быть зарегистрировано больше групп, чем на самом деле. @count также может быть недооценен. Чтобы уменьшить неточность, нужно поднять max_matches. Если max_matches позволяет сохранить все найденные группы, результаты будут на 100% правильными.

Так что я могу обойти это, увеличив значение в max_matches, но так как установка очень большого значения абсолютно нежелательна, я бы вместо этого исправил запрос.

...