在Lucene,为什么我的提升和未提升的文档获得相同的分数?

Bar*_*rka 6 lucene lucene.net

在索引时我以这种方式提升某些文档:

if (myCondition)  
{
   document.SetBoost(1.2f);
}
Run Code Online (Sandbox Code Playgroud)

但在搜索时间文件具有完全相同的质量,但有些传递和一些失败的myCondition都最终得到相同的分数.

这是搜索代码:

BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(new TermQuery(new Term(FieldNames.HAS_PHOTO, "y")), BooleanClause.Occur.MUST);
booleanQuery.Add(new TermQuery(new Term(FieldNames.AUTHOR_TYPE, AuthorTypes.BLOGGER)), BooleanClause.Occur.MUST_NOT);
indexSearcher.Search(booleanQuery, 10);
Run Code Online (Sandbox Code Playgroud)

你能告诉我我需要做些什么才能获得提升的文件以获得更高的分数?

非常感谢!

jpo*_*ntz 6

Lucene使用SmallFloat #flootToByte315方法对单个字节进行加速编码(尽管浮点数通常按四个字节编码).因此,将字节转换回float时,精度可能会大大降低.

在你的情况下SmallFloat.byte315ToFloat(SmallFloat.floatToByte315(1.2f))返回1f因为1f和1.2f彼此太靠近了.尝试使用更大的提升,以便您的文档获得不同的分数.(例如1.25,SmallFloat.byte315ToFloat(SmallFloat.floatToByte315(1.25f))给出1.25f.)