我对Lucene.NET API感到有点困惑,但是,由于我还在学习,这可能只是一个误解。
创建文档时,可以向该文档添加字段。一个例子:
//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的实例允许我提供增强词典,但是,那么在场上设置增强的重点是什么?查询解析器不知道我的文档及其中包含的字段(因此,我对字段提升没有任何了解)。
这只是旧代码遗留在库中的错误吗?或者,如果您的代码结构不同,那么设置字段上的提升实际上会有所不同吗?
答案 0 :(得分:2)
Lucene允许索引时间提升(在文档和字段级别)和查询时间提升。
创建文档并在字段级别添加提升时,您正在使用索引时间提升。
MultiFieldQUeryParser的Boost参数用于提高查询时间。如果要使用索引时间提升值,则无需传递此提升值。在得分计算中隐含使用该提升值。
答案 1 :(得分:2)
我使用与Ek0nomik相同的逻辑并获得扩展查询的常量分数。
我在MultiFieldParser中使用SetMultiTermRewriteMethod(CORING_BOOLEAN_QUERY_REWRITE)
并在索引中搜索两个字段。第一个字段的boost值为2,第二个字段的默认值为1
索引文档后,我可以在索引中看到正确的范数值(使用luke)。在不同字段中使用搜索词搜索索引时,我会得到与所有结果相同的相关性
我认为对于提升值为2的领域应该有更高的相关性。我在考虑正确的得分结果时有错误吗?
在调试模式下,我无法看到在解析搜索词后对结果进行评分的任何语法。它看起来像这样:...description:*test* title:*test* path:*test*...
。
搜索查询中是否应该有...description:*test* title:*test*^2 path:*test*...
等评分值?