Java lucene boosting如何受到长度范数相似性的影响

Java lucene boosting如何受到长度范数相似性的影响,java,lucene,similarity,solr-boost,Java,Lucene,Similarity,Solr Boost,我有两份文件,其中包括: doc_1:一二三四五宾果游戏 doc_2:宾果一二三四五 我在两个字段中分别建立索引,其中一个字段包含前5个术语,第二个字段包含最后一个术语 TextField start_field = new TextField("start_words", content.substring(0, index), Field.Store.NO); TextField end_field = new TextField("end_words", content.substring

我有两份文件,其中包括:

doc_1
一二三四五宾果游戏

doc_2
宾果一二三四五

我在两个字段中分别建立索引,其中一个字段包含前5个术语,第二个字段包含最后一个术语

TextField start_field = new TextField("start_words", content.substring(0, index), Field.Store.NO);
TextField end_field = new TextField("end_words", content.substring(index,content.length()-1, Field.Store.NO);
// index is index value of 5th ' '
为了更好地看到增强效果,我实现了以下相似性:

DefaultSimilarity customSimilarity = new DefaultSimilarity() {
     @Override
     public float lengthNorm(FieldInvertState state) {
         return 1; // So length of each field would not matter
     }
};
在不应用任何boost的情况下,搜索
Bingo
将导致两个文档具有相同的分数(如预期和预期的)。 但是,当对其中一个字段(
start\u field.setBoost(5)
)应用提升时,两个分数保持相同,尽管doc\u 2包含
Bingo
的字段被提升

如果我删除了
customSimilarity
,那么boosting将按预期工作

为什么
lengthNorm
停止了
boosting
,我怎样才能使boosting在给定的覆盖相似性下工作?

DefaultSimilarity
lengthNorm()的
属性是
状态。getBoost()*lengthNorm(numTerms)

在您的实现中,您没有考虑到提升。为了使boost变得重要,您可以让实现返回state.getBoost()