【问题标题】:Lucene index time field boosts vs query time boostsLucene 索引时间字段提升与查询时间提升
【发布时间】:2017-05-26 13:08:50
【问题描述】:

索引时间字段提升(field.setBoost(boost))和查询时间提升(query.setBoost(boost))有什么区别

Lucene 的常见问题解答似乎与 javadoc 冲突。 (Lucene 4.9.0)

FAQ:

索引时间字段提升 (field.setBoost(boost)) 是一种表达诸如“此文档的标题价值是大多数文档的标题的两倍”之类的方式。查询时间提升 (query.setBoost(boost)) 是一种表达“我关心查询的这个子句的匹配是我关心查询的其他子句匹配的两倍”的一种方式。

如果在每个文档上都设置索引时间字段提升,则毫无价值。

JAVADOC:

Lucene 允许通过在不同时间“提升”来影响搜索结果:

通过在将文档添加到索引之前调用 Field.setBoost() 来提升索引时间。 通过在查询子句上设置提升,调用 Query.setBoost() 来提升查询时间。 为提高存储效率对索引时间提升进行了预处理,并将其写入字段的存储,如下所示:

通过测试,FAQ 是错误的。在所有文档上设置相同的索引时间字段提升确实会影响评分。

javadoc 听起来像索引时间字段提升和查询时间提升对评分有完全相同的影响。这是真的吗?

【问题讨论】:

    标签: lucene


    【解决方案1】:

    它们具有(大致)相同的效果,是的。文档的重点是,如果您提升所有内容,它将对评分没有有意义影响。它说它们将毫无价值,而不是它们将被忽视。就像这样写一个查询:

    field:one^2 field:two^2 field:three^2
    

    这些查询时间提升会改变分数,是的,但由于每个查询词都提升了相同的数量,因此影响没有意义。结果的分布完全不受提升的影响,因此它们没有实际用途。

    是否使用查询时间或索引时间提升归结为方便。如果某个字段值总是应该被提升,您可以使用索引时间提升。如果您希望针对特定查询提升它,那么查询时间提升是唯一有意义的事情。


    大致,因为索引时间提升是使用有损压缩算法存储的,这有时会导致明显的精度损失。

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2011-10-02
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多