情况:我有一个 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 运算符时的结果(损坏):