如何按日期筛选solr中的查询?

时间:2012-10-19 15:19:12

标签: solr

在我的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>

我错过了什么吗?

提前感谢。

3 个答案:

答案 0 :(得分:39)

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

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

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

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

我希望有帮助

答案 1 :(得分:11)

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

使用基于ISO 8601的格式在Solr中写入显式日期,该格式由yyyy-mm-ddThh:mm:ss.mmmZ形式的字符串组成,其中&#39; yyyy&#39;是四位数的年份,第一个是&#39; mm&#39;是两位数的月份,&#39; dd&#39;是两位数的日子,&#39; T&#39;是强制性字面字母&#39; T&#39;表明时间紧随其后,&#39; hh&#39;是两位数的小时(&#39; 00&#39;到#23;&#39;),第二个&#39; mm&#39;是两位数的分钟(&#39; 00&#39;到&#39; 59&#39;),&#39; ss&#39;是两位数秒(&#39; 00&#39;到&#39; 59&#39;),可选&#39; .mmm&#39;是一个以句号开头的三位数毫秒,而且是&#39; Z&#39;是强制性字面字母&#39; Z&#39;表示时间是UTC(&#39; Zulu&#39;)。毫秒部分,包括其领先期,是可选的。毫秒不需要尾随零。

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 Documentation

答案 2 :(得分:0)

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

在Solr中 - -共同 - - - q 日期:[26-09-2019至02-10-2019] 它给出了上述范围内的所有数据。