Sphinx搜索相关性问题

时间:2013-07-11 08:24:57

标签: sphinx thinking-sphinx

我已将电影表中的以下列编入索引:movie_namelanguages(作为文字)。我还有popularity列作为属性所以基本上示例记录如下:

movie_name: "The French Kiss"
languages: "English French"

我想要做的是搜索具有法语和英语的电影,根据相关性对其进行排序(因此包含两种语言的电影将排名更高)然后再受欢迎。我正在使用Thinking Sphinx gem,但基本上我的查询看起来像:

'@languages "French English"', order: "@relevance DESC, popularity DESC"

现在问题是电影中语言法语以及电影名称排名更高,即使它们的受欢迎程度较低。现在我明白了这种情况,因为电影文档中有两个“法语”,即movie_name和languages。

我尝试将排名算法更改为bm25(不考虑关键字出现次数),但仍会返回相同的结果。

如何更改查询,使其首先返回与“法语和英语”语言相匹配的电影,根据受欢迎程度进行排序,然后仅根据法语和英语进行排序。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

了解Sphinx排名更精细点的人可能能够提供更多帮助,但有一点可能值得尝试的是在这两个领域都有字段权重,并且语言或电影名称的排名明显更高?不确定这是否能让你得到你正在追求的东西。

答案 1 :(得分:0)

我最终使用了一些黑客:我现在使用被编入字符串索引的语言ID,而不是使用语言名称。因此,例如,“英语法语”将变为“10000001 10000002”,其中10000001是英语的id,10000002是法语的id。

如果有人有更好的解决方案,那就很乐意。