Lucene索引时间字段提升与查询时间提升

时间:2017-01-11 16:34:06

标签: lucene

索引时间字段提升(field.setBoost(boost))和查询时间提升(query.setBoost(boost))

之间有什么区别

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

FAQ

  

索引时间字段提升(field.setBoost(boost))是一种表达类似事物的方式;该文档的标题价值是大多数文档标题的两倍"。查询时间提升(query.setBoost(boost))是一种表达方式"我关心我的查询的这个子句的匹配次数是我对查询的其他子句的匹配的两倍"。

     

如果在每个文档上设置索引时间字段提升都没有价值。

JAVADOC

  

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

     

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

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

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

1 个答案:

答案 0 :(得分:0)

他们(大致)效果相同,是的。文档提出的要点是,如果你提升一切,它将对评分没有有意义的影响。它说它们将毫无价值,而不是它们将被忽视。这就像编写这样的查询:

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

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

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

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