【问题标题】:Does disabling norms on one field give advantage over other fields when searching multiple fields?在搜索多个字段时,禁用一个字段的规范是否比其他字段更有优势?
【发布时间】:2012-03-24 18:43:10
【问题描述】:

我有许多字段,要么只包含一个术语,要么我不希望它们在它们确实有更多术语时受到不利影响,而且我从不提升字段,所以我禁用这些字段的规范Field.Index.ANALYZED_NO_NORM 或 Field.Index.NOT_ANALYZED_NO_NORM。

但是现在如果我使用两个字段进行搜索

fielda:term1 OR fieldb:term2

并且 fielda 启用了规范,而 fieldb 没有,这是否意味着匹配 fieldb 的文档比匹配 fielda 的文档更有可能得分,因为仅匹配 fielda 的文档的得分最终会更低分数在

weight = tf * idf * fieldnorm calculation.

因为如果该字段包含多个术语,则 fieldnorm 将小于一个

这不是我想要的,我只是想要一个在 fieldb 上匹配的文档,其中包含三个要评分的术语,以及在一个文档 fieldb 上匹配一个术语

我是否理解正确,所有关于 fieldnorm 的讨论都集中在它占用内存的事实上,如果您的字段仅包含一个术语,则没有必要我读过没有关于它如何影响结果的讨论,因为禁用规范的领域比具有规范的领域具有明显优势。

【问题讨论】:

    标签: java lucene scoring


    【解决方案1】:

    我的建议是不要将禁用规范的字段的查询与标准字段的查询混合使用。当查询仅用作过滤器(而不影响分数)时,禁用规范的目的是节省空间。

    做你想做的事的优雅方式是在你的领域有两个不同的相似之处。但是,此功能(per-field similarity)目前仅在开发版本中可用。

    【讨论】:

    • 嗨,是的,我知道相似模型已经在 Lucene 4.0 中打开了很多,但不幸的是我不能使用它。我不太确定规范仅在我的情况下禁用过滤器我禁用它们以防止当多个值被添加到一个字段并且当它只有一个值时不能公平地与同一个字段进行比较时的一对多场景。但是你还没有回答我的断言是否正确,即没有规范的领域与有规范的领域相比具有隐含的提升。
    • 这是正确的。查看 DefaultSimilarity svn.apache.org/repos/asf/lucene/dev/branches/branch_3x/lucene/… 中的 computeNorm 定义,对于禁用规范的字段,规范化因子将为 1,对于标准字段,规范化因子将为 1/sqrt(numTerms)。您可以覆盖 computeNorm 以将其结果乘以 sqrt(3),以便具有 3 个术语的字段与禁用规范的字段具有相同的规范(但这是一种 hack)。请注意,如果您修改了 computeNorm 的定义,则需要重新索引以使更改可见。
    • 好的,是的,没有禁用规范就像字段只包含一个术语一样,因此实际上任何只包含单个值的字段与其他字段相比也将具有优势,尽管这可能会被事实上,idf 可能以相反的方式工作,因为 if 字段仅包含单个值可能在索引中更常见。现在,即使我有每个领域的相似性,我也不太确定我会采取什么方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多