36

在我的 SOLR 中有日期字段(published_date),值采用这种格式“2012-09-26T10:08:09.123Z”

我如何通过简单的输入(如“2012-09-10”而不是完整的 ISO 日期格式)进行搜索。

SOLR 有可能吗?我试过了

fq=[2012-09-24%20TO%20NOW]

它应该通过过滤大于发布日期 2012-09-24 且小于现在的结果来返回。

但它返回发布日期为 2012-09-23 的数据,如下所示

<float name="score">2.8183863</float>
<str name="name">Local Team Inspires Obama</str>
<date name="published_date">2012-09-23T07:44:53.123Z</date>

我错过了什么吗?

提前致谢。

4

3 回答 3

67

如果您想获得上周的出版物,您可以执行以下操作:

&fq=published_date:[NOW-7DAY/DAY TO NOW]

但是如果你想要一个具体的日期,你必须使用 SOLR 日期格式:

&fq=published_date:[2013-07-17T00:00:00Z TO NOW]

最后但并非最不重要的。

  • 用于[ ]包含范围
  • 用于{ }独占范围
  • 您可以将它们混合在一起[ }以实现包容性 - 独占性,反之亦然{ ]

我希望这会有所帮助

于 2013-07-24T15:31:11.090 回答
16

Solr 日期的最简单形式是关键字“NOW”,它指的是当前日期和时间。它在 Solr 中区分大小写,但 Lucid 查询解析器将允许它在任何情况下都是如此。如果没有指定明确的日期或日期数学,则可以使用“现在”,或者如果指定了日期数学但没有明确的日期,则可以使用它。

Solr 中使用基于 ISO 8601 的格式写入明确的日期,该格式由 yyyy-mm-ddThh:mm:ss.mmmZ 形式的字符串组成,其中“yyyy”是四位数年份,第一个“mm” ' 是两位数的月份,'dd' 是两位数的日期,'T' 是强制性的文字字母 'T',表示时间紧随其后,'hh' 是两位数的小时数('00' 到 ' 23'),第二个 'mm' 是两位数的分钟('00' 到 '59'),'ss' 是两位数的秒数('00' 到 '59'),可选的 '.mmm' 是以句点开头的三位数毫秒,“Z”是强制性文字字母“Z”,表示时间为 UTC(“祖鲁”)。毫秒部分,包括它的前导周期,是可选的。

For example:

    2008-01-01T00:00:00Z

    2008-01-01T00:00:00

    2008-01-01T00:00 same as [2008-01-01T00:00:00Z TO 2008-01-01T00:00:59Z]

    2008-01-01T00: same as [2008-01-01T00:00:00Z TO 2008-01-01T00:59:59Z]

    2008-01-01T same as [2008-01-01T00:00:00Z TO 2008-01-01T23:59:59Z]

    2008-01-01 same as [2008-01-01T00:00:00Z TO 2008-01-01T23:59:59Z]

    2008-01 same as [2008-01-01T00:00:00Z TO 2008-01-31T23:59:59Z]

    2008 same as [2008-01-01T00:00:00Z TO 2008-12-31T23:59:59Z]

归功于 Solr文档

于 2015-04-07T09:38:53.067 回答
0

如果你想搜索简单的 dd-MM-yyyy 所以,你的日期 - “2012-09-26T10:08:09.123Z”

在 Solr ---Common----- q Date:[26-09-2019 TO 02-10-2019] 它给出了上述范围之间的所有数据。

于 2020-02-10T06:34:30.810 回答