我对APILucene.NET有点困惑,但是,这可能只是我的一个误解,因为我还在学习。
创建文档时,您会向该文档添加字段。一个例子:
//Create the field.
field = new Field(
fieldName,
fieldValue,
isFieldStorable ? Field.Store.YES : Field.Store.NO,
Field.Index.ANALYZED
);
//If a boost value was supplied, then set the boost for this field.
if (boostValue != null) {
field.SetBoost((float)boostValue);
}
这会正确设置字段的提升。然后将该字段添加到文档中,并将文档添加到索引编写器中。
但是,在字段上设置提升似乎并不重要。这有什么区别?因为,当我创建查询时,我需要调用如下内容:
multiFieldQueryParser = new MultiFieldQueryParser(
Lucene.Net.Util.Version.LUCENE_29,
fieldsToSearch.ToArray(),
analyzer
);
创建MultiFieldQueryParser的实例允许我提供一个提升字典,但是,那么在字段上设置提升有什么意义呢?查询解析器对我的文档及其中包含的字段一无所知(因此,对我的字段提升一无所知)。
这仅仅是旧代码留在库中的错误吗?或者,如果您的代码结构不同,在字段上设置boost实际上会有所不同吗?
Lucene允许索引时间提升(在文档和字段级别)和查询时间提升。
当您创建文档并在字段级别添加提升时,您正在使用索引时间提升。
MultiFieldQUeryParser的Boost参数用于查询时间提升。如果要使用索引时间提升值,则无需传递此提升值。该提升值在分数计算中隐式使用。
我使用相同的逻辑,然后Ek0norik并获得扩展查询的常数分数。
我在MultiFieldParser中使用SetMultiTermRewrite eMethod(CORING_BOOLEAN_QUERY_REWRITE)
并在索引中搜索两个字段。第一个字段具有boost-value=2,第二个字段具有default-value=1。
索引文档后,我可以在索引中看到正确的范数值(使用luke)。当在不同字段中使用搜索词搜索索引时,我对所有结果都有相同的相关性。我认为在boost-value为2的字段上应该有更高的相关性。我在思考正确的评分结果时是否有错误?
在调试模式下,我看不到任何语法在解析搜索词后对结果进行评分。它看起来像这样:…描述:*test*title:*test*path:*test*…
。
在搜索查询中不应该有任何评分值,如…描述:*test*title:*test*^2 path:*test*…
?