狮身人面像根据单词位置搜索和排名

时间:2012-06-25 13:21:34

标签: sphinx

使用Sphinx搜索,是否有可能确定结果的权重,以确定列表中单词的位置?

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

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

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

希望这是有道理的。

由于

迈克尔

2 个答案:

答案 0 :(得分:1)

您可以使用字段级别排名来执行此操作。使用“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个单词为止,之后不再给予权重。

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

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

答案 1 :(得分: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 

或类似。