Lucene Boost Confusion - 在文档或查询解析器中设置字段的提升?

时间:2012-06-20 16:52:40

标签: search lucene lucene.net

我对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的实例允许我提供增强词典,但是,那么在场上设置增强的重点是什么?查询解析器不知道我的文档及其中包含的字段(因此,我对字段提升没有任何了解)。

这只是旧代码遗留在库中的错误吗?或者,如果您的代码结构不同,那么设置字段上的提升实际上会有所不同吗?

2 个答案:

答案 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*...等评分值?