1

是否有可能使用 Sphinx Search 来确定结果的权重取决于单词在列表中的位置?

例如,如果您的行中的列包含以下文本:

Row #1: "dog, bird, horse, cat"
Row #2: "dog, bird, cat"

然后使用"dog | cat"我希望第 2 行的排名高于第 1 行执行 OR 搜索,因为两者"dog""cat"找到了,但 #2 使这两个比 #1 更接近。

希望这是有道理的。

谢谢

迈克尔

4

2 回答 2

2

您可以通过使用字段级别排名来做到这一点。使用“SPH_RANK_EXPR”作为您的排名并查看字段级别因子“min_hit_pos”来判断哪个单词首先匹配。

所有信息都可以在http://sphinxsearch.com/docs/manual-2.0.4.html#weighting找到

如果您仔细查看下面的 SPH_RANK_SPH04 排名算法,它包括 min_hit_pos,但仅将功劳归于匹配词为第一个词的行。

sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25 

您可以做的是使用相同的算法,但将“2*(min_hit_pos==1)”更改为如下所示:-

(101-IF(min_hit_pos<100,min_hit_pos,100))

如果在第一个单词上匹配,一行将获得额外的 100 权重,如果在第二个单词上匹配,则为 99,依此类推,直到第 100 个单词,之后不再给予权重。

您可以使用这些值并包含一个乘数以查看结果是否更好。

希望有帮助。如果您有任何问题,请告诉我。

于 2012-06-25T16:24:39.523 回答
0

你试过SPH_RANK_PROXIMITY排名模式吗?


否则可能会更明确并执行类似的查询 - 使用 SPH_RANK_WORDCOUNT

"dog cat"/1 | "dog cat"~10 | "dog cat"~8 | "dog cat"~6 | "dog cat"~4 | "dog cat"~3 | "dog cat"~2 | "dog cat"~1 

或类似的。

于 2012-06-26T11:06:05.080 回答