是否有可能使用 Sphinx Search 来确定结果的权重取决于单词在列表中的位置?
例如,如果您的行中的列包含以下文本:
Row #1: "dog, bird, horse, cat"
Row #2: "dog, bird, cat"
然后使用"dog | cat"
我希望第 2 行的排名高于第 1 行执行 OR 搜索,因为两者"dog"
都"cat"
找到了,但 #2 使这两个比 #1 更接近。
希望这是有道理的。
谢谢
迈克尔
是否有可能使用 Sphinx Search 来确定结果的权重取决于单词在列表中的位置?
例如,如果您的行中的列包含以下文本:
Row #1: "dog, bird, horse, cat"
Row #2: "dog, bird, cat"
然后使用"dog | cat"
我希望第 2 行的排名高于第 1 行执行 OR 搜索,因为两者"dog"
都"cat"
找到了,但 #2 使这两个比 #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 个单词,之后不再给予权重。
您可以使用这些值并包含一个乘数以查看结果是否更好。
希望有帮助。如果您有任何问题,请告诉我。
你试过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
或类似的。