0

情况:我有一个 MySQL 数据库,总共有 200 万条记录,其中包含英文和中文文本单词和语料库以及它们之间的关系。它位于具有 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 并且效果非常好。我相信问题可能是用于模糊匹配的匹配模式?

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

这是使用 OR 运算符(正常)时的结果: 在此处输入图像描述 这是使用 Quorum 运算符时的结果(损坏):

在此处输入图像描述

4

1 回答 1

1

按非 FT 属性过滤可能会很慢。如果您正在寻找具有 4 个或更多匹配项的文档,您可能需要使用 quorum 运算符:

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

这需要启用 SPH_MATCH_EXTENDED 模式

希望这可以帮助。

于 2012-07-14T12:08:28.773 回答