通过匹配&和sphinx / sort结果自定义排序特定领域的距离

时间:2012-06-13 06:58:37

标签: sphinx

我正在使用 sphinx 2.0

我希望获得以下结果:

  1. 用户将使用其他搜索词输入标签,与用户输入标签关联的文档应排在最前面,按距离排序。
  2. 之后,文档不包含按距离排序的标签。
  3. 我在做什么:

    我正在使用@ 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);

    有什么建议可以解决这个问题吗?或任何其他方式来实现它。

    非常感谢。

1 个答案:

答案 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');
相关问题