IDF 对索引中现有文档的重新计算?

IDF recaculation for existing documents in index?

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

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

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

When we refer to documents in the preceding formulae, we are actually talking about a field within a document. Each field has its own inverted index and thus, for TF/IDF purposes, the value of the field is the value of the document.

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