【问题标题】:What Happens When Multiple Fields with the Same Name have Different Boosts?当多个同名字段具有不同的提升时会发生什么?
【发布时间】:2018-12-18 18:03:30
【问题描述】:

Boost is by-Field in Lucene,然后在索引中设置。您可以添加多个将 Name 属性设置为相同值的字段,然后将在这些字段中搜索该文档,就像您刚刚将这些术语的并集添加到该文档中的该字段名称一样。

var field1 = new Field("Text", "aquaculture");
var field2 = new Field("Text", "fish");
field1.setBoost(1.0f);
field2.setBoost(2.0f);
var doc = new Document();
doc.AddField(field1);
doc.AddField(field2);

但是您可以在这样做时将 Boost 设置为多个值 - 如果这样做,会发生什么?每个字段中的术语是否设置为单独的 Boost 级别,还是使用一个共享的 Boost 级别?如果有,是 Last-In、First-In 还是随机的?

(上面的代码是伪代码,只是为了说明将字段添加到单个文档中以帮助编码人员对其进行可视化,我意识到执行上述操作的实际代码与实际的 Lucene API 有点不同)

【问题讨论】:

    标签: lucene


    【解决方案1】:

    对于当前版本的 Lucene,这个问题不再相关。在 6.5 中不推荐在字段上设置提升,并且在 7.0 中不再支持。请参阅LUCENE-6819 进行讨论。替换,根据migration guide

    ...索引时间评分因素应在文档值字段中编制索引,并与查询时的分数相结合,例如使用 FunctionScoreQuery。


    在以前的版本中,如果多个提升添加到同一个字段,它们会成倍增加。这由 FieldInvertState 指定,这是传递给 Similarity 的信息,后者将该数据转换为存储在索引中的内容。

    这是共享相同字段名称的所有字段实例的文档提升和字段提升的累积乘积。

    【讨论】:

    • 有趣的问题;我在 Lucene.Net 上,它是 4.8 版,所以多重字段提升仍然非常重要。如果我正确理解了版本历史,文档提升在从 3.0 到 4.0 的过渡期间消失了,取而代之的是字段提升,因此在未来版本中看到它迁移回文档几乎太糟糕了。也就是说,它似乎确实更正确,因为在多个字段添加上相乘根本不是我直觉的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多