3

我对 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 的实例允许我提供一个提升字典,但是,那么在字段上设置提升有什么意义呢?查询解析器对我的文档和其中包含的字段一无所知(因此,对我的字段提升一无所知)。

这只是旧代码留在库中的错误吗?或者,如果您的代码结构不同,那么在现场设置提升实际上会产生影响吗?

4

2 回答 2

2

Lucene 允许索引时间提升(在文档和字段级别)和查询时间提升。

当您创建文档并在字段级别添加提升时,您正在使用索引时间提升。

MultiFieldQUeryParser 的 Boost 参数用于查询时间提升。如果要使用索引时间提升值,则无需传递此提升值。该提升值隐含在分数计算中。

于 2012-06-20T17:08:38.980 回答
2

我使用与 Ek0nomik 相同的逻辑,并为扩展查询获得恒定分数。

SetMultiTermRewriteMethod(CORING_BOOLEAN_QUERY_REWRITE)在 MultiFieldParser 中使用并在索引中搜索两个字段。第一个字段的 boost-value=2,第二个字段的 default-value=1。
索引文档后,我可以在索引中看到正确的规范值(使用卢克)。在使用不同字段中的搜索词搜索索引时,我得到所有结果的相同相关性。
我认为 boost-value 为 2 的字段应该有更高的相关性。我在思考正确的评分结果时是否有错误?

在调试模式下,我在解析搜索词后看不到任何用于对结果进行评分的语法。它看起来像这样:...description:*test* title:*test* path:*test*...。搜索查询中
不应该有任何评分值吗?...description:*test* title:*test*^2 path:*test*...

于 2012-10-05T17:09:54.680 回答