9

我有一个 solr 实例,其中包含从上个月到一年后的“startTime”字段的文档。我想添加一个提升查询/函数来提升 startTime 字段接近当前时间的文档的分数。

到目前为止,我已经看到了很多使用 rord 为较新的文档添加提升的示例,但我从未见过这样的示例。

谁能告诉我该怎么做?

谢谢

4

2 回答 2

17

如果您使用的是 Solr 1.4+,那么您可以访问函数查询中的“ms”函数,而标准的教科书式方法是:

recip(ms(NOW,startTime),3.16e-11,1,1)

ms 给出它的两个参数之间的毫秒数。整个表达式将现在日期的文档的分数提高 1,对 1 年前的文档提高 1/2,对 2 年前的文档提高 1/3,等等。(参见http://wiki.apache.org /solr/FunctionQuery#Date_Boosting,正如 Sean Timm 指出的那样。)

在您的情况下,您有未来的文档,并且上述函数将为这些文档分配负分,因此您可能希望输入一个绝对值,如下所示:

recip(abs(ms(NOW,startTime)),3.16e-11,1,1)

abs(ms(NOW,startTime)) 将给出 startTime 和 now 之间的毫秒数,保证为非负数。

那将是一个很好的起点。如果您愿意,您可以调整 3.16e-11,如果它过于激进或不够激进。

相切地, ms 函数仅适用于基于 TrieDate 类的字段,而不适用于经典的 Date 和 LegacyDate 类。如果您的 schema.xml 基于 Solr 1.4 的示例,那么您的日期字段可能已经采用正确的格式。

于 2010-04-20T16:20:13.350 回答
1

您可以在 Solr 1.4 中进行日期数学运算。

http://wiki.apache.org/solr/FunctionQuery#Date_Boosting

于 2010-04-20T15:54:26.860 回答