web-dev-qa-db-ja.com

solrのクエリを日付でフィルタリングする方法は?

私のSOLRには日付フィールド(published_date)があり、値はこの形式です"2012-09-26T10:08:09.123Z"

完全なISO日付形式ではなく、「2012-09-10」のような単純な入力で検索する方法。

SOLRで可能ですか?

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

2012-09-24の公開日よりも大きく、NOWよりも小さい結果をフィルタリングして返されるはずです。

しかし、以下のように、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>

何か不足していますか?

前もって感謝します。

22
user1289853

先週の出版物を入手したい場合は、次のようなことができます。

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

ただし、具体的な日付が必要な場合は、SOLR日付形式で行う必要があります。

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

それがお役に立てば幸いです

42
Khriz

Solrの日付の最も単純な形式は、現在の日付と時刻を参照するキーワード「NOW」です。 Solrでは大文字と小文字が区別されますが、Lucidクエリパーサーはどのような場合でもそれを許可します。 「NOW」は、明示的な日付または日付の数学が指定されていない場合、または日付の数学が明示的な日付なしで指定されている場合に使用できます。

明示的な日付は、yyyy-mm-ddThh:mm:ss.mmmZという形式の文字列で構成されるISO 8601に基づく形式を使用してSolrで記述されます。「yyyy」は4桁の年、最初の「mm」 'は2桁の月、' dd 'は2桁の日、' T 'は時刻が続くことを示す必須のリテラル文字' T '、' hh 'は2桁の時間(' 00 'から' 23 ')、2番目の「mm」は2桁の分(「00」から「59」)、「ss」は2桁の秒(「00」から「59」)、オプションで「.mmm」はピリオドが先行する3桁のミリ秒。「Z」は、時刻がUTC(「Zulu」)であることを示す必須のリテラル文字「Z」です。先行期間を含むミリ秒部分はオプションです。ミリ秒の場合、末尾のゼロは不要です。

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へのクレジット ドキュメント

12
Ahmed Salem