我正在使用 sphinx 2.0 。
我希望获得以下结果:
我在做什么:
我正在使用@ name,@ tag,@ streetname等同时搜索不同的参数。所以我在下面使用
$cl->SetMatchMode(SPH_MATCH_EXTENDED);
并使用$cl->SetSortMode(SPH_SORT_EXTENDED, '@geodist asc');
标记字段可以包含多个值,我使用OR运算符来获得所需的结果。
如果我只搜索@tags,那么我就能达到我提到的要求。但如果用户输入的是@tag食品|晚餐@city london @name taxi
然后以名称结果:伦敦出租车,街道:伦敦排在最前面或其他一些位置以lat-long打破排序顺序。因为伦敦有两个参数。我只想按标签排序,不希望在排序顺序中包含其他搜索字词的权重。
排名模式为:$cl->setRankingMode(SPH_RANK_PROXIMITY_BM25);
有什么建议可以解决这个问题吗?或任何其他方式来实现它。
非常感谢。
答案 0 :(得分:1)
我认为解决这个问题的方法是安排标记字段上的匹配排名更高。必须测试它,但这样的事情......
$cl->setFieldWeights(array('tags' => 100000));
$cl->setSelect("*,IF(@weight>100000,1,0) AS matchtags");
$cl->SetSortMode(SPH_SORT_EXTENDED, 'matchtags DESC, @geodist ASC');