如何解决为什么在Lucene中的索引时间设置相似性函数?
在索引期间,Lucene如何使用相似性?在阅读索引时,我了解相似性的作用。因此,searcher.setSimilarity()
在得分上很有意义。 IndexWriterConfig.setSimilarity()
的用途是什么?
解决方法
Lucene如何在建立索引期间使用相似性?
简短的答案是:Lucene在索引编制时捕获一些统计信息,然后可以将其用于支持查询时进行评分。我希望将它们作为索引过程的一部分来捕获,而不是在运行查询时动态地重新计算,这只是效率问题。
Similarity
Javadoc中有一个部分对此进行了概括性描述:
在建立索引时,索引器调用
computeNorm(FieldInvertState)
,从而允许相似性实现为字段设置每个文档的值,稍后可通过LeafReader.getNormValues(String)对其进行访问。
javadoc继续描述更多详细信息-例如:
许多公式都需要使用平均文档长度,可以通过CollectionStatistics.sumTotalTermFreq()和CollectionStatistics.docCount()的组合来计算。
例如,Lucene索引中的segment info文件记录了每个段中的文档数。
还有其他一些统计信息可以在索引中捕获,以支持在查询时进行评分计算。您可以在Index Structure Overview文档中查看这些统计信息的摘要-带有指向更多详细信息的链接。
IndexWriterConfig.setSimilarity()的用途是什么?
这是从以上几点出发的一个相关问题。
默认情况下,Lucene使用BM25Similarity
公式。
这是您可以选择使用(或可以定义自己的)几种不同评分模型之一。 setSimilarity()
方法是如何从默认值中选择不同的相似度(评分模型)。这意味着可能需要捕获(然后以不同的方式使用)不同的统计信息以支持所选的评分模型。
在建立索引时使用一种评分模型,在查询时使用另一种评分模型是没有意义的。
(请注意:我从未亲自设置相似性评分模型-我一直使用默认模型。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。