长度规范相似性如何影响lucene提升



我有两个文档包含:

doc_1: one two three four five Bingo

doc_2: Bingo one two three four five

我在每个字段中索引两个字段,其中一个字段包含前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_field.setBoost(5))应用boost时,两个分数保持相同,尽管doc_2包含Bingo的字段被提升了。

如果我删除customSimilarity,增强工作如预期。

为什么boostinglengthNorm停止,我如何使增强工作与给定的覆盖相似度?

DefaultSimilaritylengthNorm()的默认实现是state.getBoost() * lengthNorm(numTerms)

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

相关内容

  • 没有找到相关文章

最新更新