elasticsearch - 索引中现有文档的 IDF 重新计算?
问题描述
我已经浏览了[相关性评分背后的理论][1],并得到了两个相关的问题
Q1 :- 因为 IDF 公式是索引idf(t) = 1 + log ( numDocs / (docFreq + 1))
中numDocs
的文档总数。这是否意味着每次在索引中添加新文档时,我们需要为索引中所有现有文档的每个单词重新计算 IDF?
Q2 :- 下面提到的链接。我的问题是,为什么要针对每个字段而不是完整文档计算 TF/IDF 分数?
当我们在前面的公式中引用文档时,我们实际上是在谈论文档中的一个字段。每个字段都有自己的倒排索引,因此,出于 TF/IDF 的目的,字段的值就是文档的值。
解决方案
- 您只在查询时而不是在插入时计算分数。Lucene 具有正确的统计数据,可以快速计算,并且值始终是最新的。
- 频率仅对单个字段才真正有意义,因为您对该特定字段的值感兴趣。假设我们有多个字段并且我们搜索一个字段,那么我们只对那个字段的频率感兴趣。搜索多个您仍然希望控制单个字段(例如将“标题”提升到“正文”)或想要定义如何组合它们的多个字段。如果你有一个没有意义的用例(不确定我现在有一个很好的例子——它在 IMO 中不太常见),那么你可以将多个字段组合成一个
copy_to
并在其上进行搜索。
推荐阅读
- swift - Swift 事件解码器失败:varint 溢出
- javascript - 在一个对象中展平和区分多个数组
- javascript - 为什么非当前 TAB 事件不执行?
- sql-server - 在确定固定宽度 CHAR 列的长度时,是否必须适应空字符的长度?
- javascript - 刷新和清除按钮在 asp.net 应用程序上不起作用
- ios - Swift/iOS13 - UIApplication.shared.delegate.window?.rootViewController?.present() 来自自定义类
- javascript - 如何构建自定义圆形计数器
- javascript - 我在 REACT JS 中使用 useForm 但收到错误 INPUT 值在 REACT JS 中的第一次 ONCHANGE 函数中不起作用
- javascript - Js 重构与追加
- android - 滚动时网格视图滞后