为什么在Lucene中设置索引时的相似性函数?

为什么在Lucene中设置索引时的相似性函数?,lucene,Lucene,Lucene在索引期间如何使用相似性?我在阅读索引时理解相似性的作用。因此,searcher.setSimilarity()在评分中是有意义的。IndexWriterConfig.setSimilarity()的用途是什么?Lucene在索引期间如何使用相似性? 简单的回答是:Lucene在索引时捕获一些统计数据,然后可以用来支持查询时的评分。我认为这仅仅是一个效率问题,它们被作为索引过程的一部分捕获,而不是在运行查询时被动态地重复重新计算 javadoc中有一节从较高的层次描述了这一点: 索引

Lucene在索引期间如何使用相似性?我在阅读索引时理解相似性的作用。因此,
searcher.setSimilarity()
在评分中是有意义的。
IndexWriterConfig.setSimilarity()的用途是什么?

Lucene在索引期间如何使用相似性?

简单的回答是:Lucene在索引时捕获一些统计数据,然后可以用来支持查询时的评分。我认为这仅仅是一个效率问题,它们被作为索引过程的一部分捕获,而不是在运行查询时被动态地重复重新计算

javadoc中有一节从较高的层次描述了这一点:

索引时,索引器调用,允许相似性实现为该字段设置每个文档的值,该字段稍后将通过LeafReader.GetNormalValues(String)访问

javadoc接着描述了进一步的细节——例如:

许多公式需要使用平均文档长度,可以通过CollectionStatistics.sumTotalTermFreq()和CollectionStatistics.docCount()的组合来计算平均文档长度

例如,Lucene索引中的文件记录每个段中的文档数

在索引中还可以捕获其他统计信息,以支持查询时的评分计算。您可以在文档中看到这些统计数据的摘要,以及指向更多详细信息的链接

IndexWriterConfig.setSimilarity()的用途是什么?

这是一个从以上几点引出的相关问题

默认情况下,Lucene使用公式

这是您可以选择使用的几种不同评分模型之一(或者您可以定义自己的评分模型)。
setSimilarity()
方法是如何从默认相似性(评分模型)中选择不同的相似性。这意味着可能需要捕获不同的统计数据(然后以不同的方式使用),以支持所选的评分模型

在索引时使用一个评分模型,在查询时使用另一个评分模型是没有意义的


(请注意:我自己从未设置过相似性评分模型-我一直使用默认模型。)

谢谢。这回答了我的问题。