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

标签 php mysql search full-text-search sphinx

情况:我有一个 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 并且效果非常快。我相信问题可能是用于模糊匹配的匹配模式?

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

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

enter image description here

最佳答案

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

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

这需要启用 SPH_MATCH_EXTENDED 模式

希望这有帮助。

关于php - 如何优化 Sphinx 搜索模糊文本匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483087/

相关文章:

php - Laravel 表格中的日期格式

php - 网页如何在下次登录时记住您?

php - 句子中带括号的单词如何大写

mysql - MySQL 中的节点是什么意思?

MYSQL IN 替代方案

c++ - QTableview搜索

c++ - 如何改进 vector 搜索功能?

search - 如何在 Solr 的多值字段中执行搜索?

php - 如何在reactphp上自动重新连接客户端?

MysqlDump 命令在 cron 中不起作用