如何优化Sphinx搜索模糊文本匹配?

时间:2012-07-14 10:42:12

标签: php mysql search full-text-search sphinx

情况:我有一个MySQL数据库,总共有2mil记录,包含英文和中文文本单词和语料库以及它们之间的关系。它位于专用服务器上,具有1.5G RAM和2.26Ghz双核CPU。使用包含超过30个中文字符的字符串进行搜索时,大约需要4秒钟才能得到结果。这太慢了。

搜索方法:运行查询时,如果有4个或更多匹配的单词,请认为查询成功,然后按相关性对结果进行排序,并选择匹配最高的结果。

以下是现在如何完成的摘要:

$this->sphinx->ResetFilters();
$this->sphinx->SetMatchMode(SPH_MATCH_ANY);
//Sort by relevance
$this->sphinx->SetSortMode(SPH_SORT_RELEVANCE);
$this->sphinx->SetArrayResult(true);
//Get 10 results
$this->sphinx->SetLimits(0,10);
//Filter the length
$this->sphinx->SetFilterRange('en_length', 10,50);

如何提高搜索效果?如果可能的话,我希望在1秒内完成。我尝试过使用SPH_MATCH_ALL,但效果非常好。我认为问题可能是用于模糊匹配的匹配模式?

更新 使用仲裁运算符应该更快,但使用它会返回意外值:

这是使用OR运算符(正常)时的结果: enter image description here 这就是Quorum运算符(损坏)的外观:

enter image description here

1 个答案:

答案 0 :(得分:1)

按非FT属性过滤可能会很慢。如果您希望获得包含4个或更多匹配项的文档,则可能需要使用仲裁运算符:

"get me any document with more than four matches"/4

这需要启用SPH_MATCH_EXTENDED模式

希望这有帮助。