我目前正在使用 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示例。