java - Apache Solr - 为什么分片索引的结果分数与非分片索引的结果分数不同?

标签 java solr lucene

我将 Solr 核心转换为具有两个分片的集合,并修改了自定义搜索组件以使其适用于分布式搜索。在测试该组件时,我注意到分片索引的结果与非分片索引的结果匹配(具有相同的查询参数),各个文档的分数不同。详细地说,当我将 q=X 发送到分片索引和非分片索引时,它们都返回文档 A、B、C。但是,来自分片核心的文档的分数为 0.1、0.2、0.3,而来自非分片索引的文档的分数为 0.1、0.2、0.3。核心可能有0.2、0.4、0.7。

造成分数差异的根本原因是什么?我不太熟悉 Lucene 如何准确地对文档进行评分,所以我想知道这是否值得担心。

最佳答案

Lucene 和 Solr 使用 Vector Space Model 。因此,逆文档频率 (IDF) 是相关性计算中的一个因素。

当涉及到分片时,这会产生影响。正如所写的in the docs

Solr does not calculate universal term/doc frequencies. For most large-scale implementations, it is not likely to matter that Solr calculates TD/IDF at the shard level. However, if your collection is heavily skewed in its distribution across servers, you may find misleading relevancy results in your searches. In general, it is probably best to randomly distribute documents to your shards.

目前没有共享的 IDF。这意味着每个分片(索引)根据其自身索引中的 IDF 计算分数。简而言之,文档的分数受到同一分片上索引的其他文档的影响。由于每个分片中存在不同的文档是合理的,这意味着不同分片中的同一文档的分数将略有不同,因为它周围还有其他文档。

我写当前没有共享IDF,因为正在创建分布式IDF - 正如您所看到的in SOLR-1632 .

关于java - Apache Solr - 为什么分片索引的结果分数与非分片索引的结果分数不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22074974/

相关文章:

solr - 使用 Solr/Lucene 时如何将命中率降低到特定分数以下?

java - 如何获取Lucene TopDocs中文档的唯一计数?

java - 无法在lucene中搜索实体

java - Maven settings.xml 未使用

java - Bash 脚本运行包含外部文件的 jar 不起作用

python - Solr 和用户数据

elasticsearch - Solr中的方面postfiletring(从ElasticSearch聚合后过滤转换)

java - 无法通过 .bat 文件设置 JVM 参数/参数(Xmx 和 Xms)

Java:解析 JavaScript 并标记错误

solr - 400 错误请求 : unknown field 'type'