搜索 - 根据关键字与最左侧的距离来计算相关性?

时间:2012-09-14 17:24:38

标签: python django lucene elasticsearch django-haystack

我目前正在使用 ElasticSearch Python / Django Django-Haystack

我希望根据关键字与最左边的距离来确定项目排名。


实施例

项目

  • Jeff is friends with John, Laura and Edward

  • Laura is friends with Francis, Drake, Jessica and Jeff

  • Edward is friends with Laura, Jeff and Jeff


如果Jeff是查询,我希望得到以下结果

  1. Jeff is friends with John, Laura and Edward

  2. Edward is friends with Laura, Jeff and Jeff

  3. Laura is friends with Francis, Drake, Jessica and Jeff


  4. 但我明白了:

    1. Edward is friends with Laura, Jeff and Jeff

    2. Jeff is friends with John, Laura and Edward

    3. Laura is friends with Francis, Drake, Jessica and Jeff

    4. 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当您查询elasticsearch时,您会返回每个文档的_score字段,如果您将explain=on参数添加到网址,您还会获得有关该分数的说明,您可以通过它理解为什么文件在最重要的位置。

无论如何,我猜你的第一个文件得分最高,因为它包含两次Jeff这个词。第三个文档是最后一个文档,因为文本字段比其他文档长,并且它只包含Jeff匹配。这就是Lucene得分的计算方法。您可以调整它,例如禁用字段长度影响分数这一事实,但除非您愿意编写一些Lucene代码,否则无法完全改变它背后的逻辑。您可以编写自己的Lucene Similarity实现并使用自定义SimilarityProvider将其插入elasticsearch中。看看this示例。