当前位置: 首页 > 知识库问答 >
问题:

Lucene索引时间字段增加vs查询时间增加

阙庆
2023-03-14

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

Lucene的FAQ似乎与javadoc冲突。(Lucene 4.9.0)

常见问题:

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

如果您在每个文档上设置索引时间字段增强,则它们毫无价值。

JAVADOC:

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

通过调用字段索引时间提升。将文档添加到索引之前的setBoost()。通过在查询子句上设置一个boost,调用Query,可以提高查询时间。setBoost()。索引时间提升经过预处理以提高存储效率,并按如下方式写入字段的存储:

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

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

共有1个答案

罗烨霖
2023-03-14

是的,它们有(大致)相同的效果。留档的重点是,如果你提高一切,对得分没有任何有意义的影响。它说它们将一文不值,而不是说它们将被忽视。就像写这样的查询:

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

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

是使用查询时还是索引时增强取决于什么是方便的。如果某个字段值应该始终提升,则可以使用索引时间提升。如果您希望它针对特定查询进行增强,那么查询时增强是唯一有意义的事情。

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

 类似资料:
  • 问题内容: 在Java应用程序中,我希望能够在操作开始时加上时间戳,并能够定期检查操作已经运行了多长时间。问题是:我不想受到网络时间协议移动时钟,管理员更改时间或任何可以突然调整一天中时间的影响。我想要单调增加的时间值。我相信这排除了java.util.Date,Time和Calendar。 JRE中是否存在某些单调增加的时间戳记的来源? 问题答案: 您是否考虑过使用System.nanoTime

  • 问题内容: 我有两个时间值。一个用于上次登录时间,一个用于当前登录时间。我必须将以前的登录时间增加一个小时。我使用了日期格式hh:mm:ss。这是我的代码段。 因此,除了上面提到的if条件之外,我还必须在previous_time上增加一个小时,然后执行if条件。如何实现呢? 问题答案:

  • 问题内容: 我想使用PHP发送数百封电子邮件。为了增加执行时间,我使用了 ini_set(’max_execution_time’,10);。 但是仅发送 30 封电子邮件后,浏览器向我显示空白页,并且不会发送所有电子邮件。 我也将限制更改为300,600 .. 问题答案: 尝试在脚本顶部。 set_time_limit 设置最大执行时间(以秒为单位)。如果设置为零,则不施加时间限制

  • 下面的while循环会额外运行一段时间。我试图执行一个用户输入,从用户那里接受10个有效数字并打印它们的总和。然而,while循环执行额外的时间并请求第11个输入。 }

  • 我们有一个应用程序,我们在其中对REST API进行一些内部超文本传输协议调用来获取数据。但是有些请求花费的时间比预期的要长,所以我尝试增加超时持续时间。我尝试了以下操作: RequestConfig RequestConfig=RequestConfig.custom()。setConnectTimeout(30*1000)。build();HttpClient HttpClient=HttpC

  • 本文向大家介绍php 将当前时间戳unixtime增加时间间隔的方法,包括了php 将当前时间戳unixtime增加时间间隔的方法的使用技巧和注意事项,需要的朋友参考一下     可以+year   还可以是天, 月日都可以的,如下代码: