【问题标题】:Sphinx search relevance issue狮身人面像搜索相关性问题
【发布时间】:2013-07-11 08:24:56
【问题描述】:

我已索引电影表中的以下列:movie_namelanguages(作为文本)。我也有popularity 列作为属性 所以基本上一个示例记录看起来像:

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

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

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

现在的问题是,语言和电影名称具有法语的电影排名较高,尽管它们的受欢迎程度较低。现在我明白这是因为电影文档中出现了两次“法语”,分别是电影名称和语言。

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

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

【问题讨论】:

    标签: sphinx thinking-sphinx


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      如果有人有更好的解决方案,会很高兴。

      【讨论】: