我目前正在使用 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是查询,我希望得到以下结果
  • Jeff is friends with John, Laura and Edward
  • Edward is friends with Laura, Jeff and Jeff
  • Laura is friends with Francis, Drake, Jessica and Jeff


  • 但是我得到这个:
  • Edward is friends with Laura, Jeff and Jeff
  • Jeff is friends with John, Laura and Edward
  • Laura is friends with Francis, Drake, Jessica and Jeff

  • 有任何想法吗?

    最佳答案

    当您查询elasticsearch时,您将返回每个文档的_score字段,并且如果您将explain=on参数添加到url,您还将获得一个关于分数的解释,通过该解释您可以了解为什么文档位于顶部或不位于顶部。

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

    08-26 04:19