我目前正在使用 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
有什么想法吗?
答案 0 :(得分:1)
当您查询elasticsearch时,您会返回每个文档的_score
字段,如果您将explain=on
参数添加到网址,您还会获得有关该分数的说明,您可以通过它理解为什么文件在最重要的位置。
无论如何,我猜你的第一个文件得分最高,因为它包含两次Jeff这个词。第三个文档是最后一个文档,因为文本字段比其他文档长,并且它只包含Jeff匹配。这就是Lucene得分的计算方法。您可以调整它,例如禁用字段长度影响分数这一事实,但除非您愿意编写一些Lucene代码,否则无法完全改变它背后的逻辑。您可以编写自己的Lucene Similarity
实现并使用自定义SimilarityProvider
将其插入elasticsearch中。看看this示例。