0

我正在使用狮身人面像 2.0

我想达到以下结果:

  1. 用户将输入带有其他搜索词的标签,与用户输入标签相关联的文档应该排在最前面,按距离排序。
  2. 之后,文档不包含按距离排序的那些标签。

我在做什么:

我正在使用@name、@tag、@streetname 等同时搜索不同的参数,所以我在下面使用

$cl->SetMatchMode(SPH_MATCH_EXTENDED);

并使用按距离对结果进行排序$cl->SetSortMode(SPH_SORT_EXTENDED, '@geodist asc');

标签字段可以包含多个值,我正在使用 OR 运算符来获得所需的结果。

如果我只搜索@tags,那么我就能达到我提到的要求。但是如果用户输入是@tag food|dinner @city london @name tax

然后结果名称为:London Taxi,街道:London 位于顶部或其他位置,按 lat-long 打破排序顺序。因为伦敦有两个参数。我只想按标签排序,不想在排序顺序中包含其他搜索词的权重。

排名模式为:$cl->setRankingMode(SPH_RANK_PROXIMITY_BM25);

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

非常感谢。

4

1 回答 1

1

我认为解决这个问题的方法是安排标签字段上的匹配以提高排名。必须对其进行测试,但类似这样的东西......

$cl->setFieldWeights(array('tags' => 100000));

$cl->setSelect("*,IF(@weight>100000,1,0) AS matchtags");

$cl->SetSortMode(SPH_SORT_EXTENDED, 'matchtags DESC, @geodist ASC');
于 2012-06-14T13:27:38.567 回答