3

さまざまな検索アプリケーションにSolrインデックスを使用しています。ほとんどの場合、管理インターフェースの場合と同じように使用します。例えば:

+text:Mr +text:burns +publish_date[2012-09-10T00:00:00Z TO 2012-10-10T00:00:00Z]

これは正常に機能します。
私の問題は、1つのアプリで(solrを使用せずに)インデックスに対して直接複雑なluceneクエリを使用し、これらのクエリで日付フィールドを検索する方法を見つけることができないことです。
schema.xmlの場合:

<field name="publish_date" type="date" indexed="true" stored="true"/>

solrは日付をミリ秒単位のUNIX時間として保存しているようですが、インデックスからフィールドをプルすると、1336867200000のようになります。

luceneでは、考えられるすべてのクエリを試しました。

TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "1299628800000", "1336867200000", true, true);
TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "1299628800", "1336867200", true, true);
TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "2012-09-10T00:00:00Z", "2012-10-10T00:00:00Z", true, true);
TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "20120910", "20121010", true, true);
NumericRangeQuery nq1 = NumericRangeQuery.newLongRange("publish_date", 1299628800, 1336867200, true, true);

そして他のいくつかの試み...
結果を返した唯一のクエリは

TermRangeQuery nq1 = new TermRangeQuery("publish_date",  null, null, true, true);

もちろん、これは「オープンエンドポイント」を使用したクエリですが、フィールドが文字列としてインデックス付けされているように見えます(同じことがint-rangeまたはlong-rangeでは機能しませんでした)。
苛立たしいことは、それが明らかに可能であるということです。私は、dosesolrがその日付範囲をどのように実行するかを理解する必要があります。
この検索を実行する方法を知っている人はいますか?
どんな助けでもいただければ幸いです。

4

1 に答える 1

2

「1336867200000」はタイムスタンプです、はい。

TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "1299628800000", "1336867200000", true, true);
TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "1299628800", "1336867200", true, true); 
TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "2012-09-10T00:00:00Z", "2012-10-10T00:00:00Z", true, true); 
TermRangeQuery nq1 = new TermRangeQuery("publish_date",  "20120910", "20121010", true, true);

数値データに文字列パラメータを使用しているため、上記のものは機能しません。

NumericRangeQuery nq1 = NumericRangeQuery.newLongRange("publish_date", 1299628800, 1336867200, true, true);

十分なゼロを埋めていなかったため、これは機能しませんでした。1299628800は、1970年1月16日金曜日02:00:28GMTの略です。

2011年9月3日から2012年5月13日までの日付のドキュメントがある場合は、次のように機能するはずです。

NumericRangeQuery nq1 = NumericRangeQuery.newLongRange("publish_date", 1299628800000L, 1336867200000L, true, true);
于 2012-10-18T19:08:42.083 に答える