Sphinx根据排序返回不一致的结果集

时间:2012-01-16 04:25:43

标签: php sphinx

我正在尝试为我正在开发的Web应用程序实现多语言索引。目前,记录以几种语言存在,英语,马来语和阿拉伯语(但不会将它们分成不同的列)。目前只启用英语词干分析器。

仅针对词干索引和非词干索引构建了两个索引。我遇到了阻塞索引的问题,因为返回的结果集不一致,具体取决于排序列。

这两个查询(来自词干索引)每个查询返回不同数量的总结果,尽管它们之间的差异只是排序顺序。

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;

但是,如果在非阻塞索引上运行相同的查询,则结果数相等。

我也遇到了与Sphinx PHP API相同的问题:

$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 :(得分:0)

我在这里的文档遗漏了一些内容http://sphinxsearch.com/docs/2.0.2/clustering.html

  

警告:分组是在固定内存中完成的,因此其结果只是近似值;所以total_found中报告的组可能比实际存在的更多。 @count也可能被低估了。为了减少不准确性,应该提高max_matches。如果max_matches允许存储所有找到的组,则结果将100%正确。

所以我可以通过增加max_matches中的值来解决这个问题,但是因为放置一个非常大的值是绝对不可取的,所以我会修改查询。