首页 > 解决方案 > 索引中现有文档的 IDF 重新计算?

问题描述

我已经浏览了[相关性评分背后的理论][1],并得到了两个相关的问题

Q1 :- 因为 IDF 公式是索引idf(t) = 1 + log ( numDocs / (docFreq + 1))numDocs的文档总数。这是否意味着每次在索引中添加新文档时,我们需要为索引中所有现有文档的每个单词重新计算 IDF?

Q2 :- 下面提到的链接。我的问题是,为什么要针对每个字段而不是完整文档计算 TF/IDF 分数?

当我们在前面的公式中引用文档时,我们实际上是在谈论文档中的一个字段。每个字段都有自己的倒排索引,因此,出于 TF/IDF 的目的,字段的值就是文档的值。

标签: elasticsearchtf-idf

解决方案


  1. 您只在查询时而不是在插入时计算分数。Lucene 具有正确的统计数据,可以快速计算,并且值始终是最新的。
  2. 频率仅对单个字段才真正有意义,因为您对该特定字段的值感兴趣。假设我们有多个字段并且我们搜索一个字段,那么我们只对那个字段的频率感兴趣。搜索多个您仍然希望控制单个字段(例如将“标题”提升到“正文”)或想要定义如何组合它们的多个字段。如果你有一个没有意义的用例(不确定我现在有一个很好的例子——它在 IMO 中不太常见),那么你可以将多个字段组合成一个copy_to并在其上进行搜索。

推荐阅读