0

我目前正在使用ElasticSearchPython/DjangoDjango-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


但我明白了:

  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 回答 1

1

当你查询 elasticsearch 时,你会得到_score每个文档的字段,如果你将explain=on参数添加到 url,你也会得到关于分数的解释,通过它你可以理解为什么文档在顶部或不在顶部。

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

于 2012-09-14T19:33:35.593 回答