【发布时间】:2012-04-07 09:10:39
【问题描述】:
我们正在使用标准 EXTENDED2 / SPH_RANK_PROXIMITY_BM25 方法在中型产品数据库(10 毫米记录,2gb)上运行 sphinx。速度很快,相关性很好。
但是,我们遇到越来越多的最终用户投诉,他们使用比我们的数据库更复杂的术语进行搜索,因此没有得到任何结果。
例如,我们有产品“KitchenAid Artisan 5-Quart Mixers”,而常见的搜索是“KitchenAid Artisan 5-Quart Stand Mixers brown”。当我们应该能够返回我们拥有的项目时,与我们当前设置的结果不匹配。
我们尝试使用 MATCH_ANY 按@weight 模式排序,但相关性完全偏离了方向[想想出现的玩偶和棋盘游戏],因为 sphinx 会用单个单词挑选其他产品。
是否有一种最佳实践方法来构建我们的查询参数,以允许更开放的匹配,同时仍然根据邻近度和词密度进行排名?
如果有帮助,这里是我们当前的 PHP API 命令
$cl = new SphinxClient();
$cl->SetServer('1.23.4', 456);
$cl->SetMaxQueryTime(15000);
$cl->SetMatchMode(SPH_MATCH_EXTENDED2);
$cl->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
$cl->SetArrayResult(true);
$cl->SetFilter('active', array(1));
$cl->SetSortMode(SPH_SORT_RELEVANCE, '@weight DESC, priced ASC');
$cl->SetLimits(intval($try), 1, 20, 500);
$cl->SetFieldWeights(array('ptitle' => 60, 'description' => 40));
$res = $cl->query($searchterm,"products");
【问题讨论】:
标签: php search full-text-search sphinx