2

を使用apache solr 4Solrています。 の初心者です。 2 つの日付の間でクエリを実行したいのですが、タイムゾーンに問題があります。

String urlString = "http://localhost:8983/solr"; 
SolrServer solr = new CommonsHttpSolrServer(urlString);
QueryResponse rsp = solr.query(  new SolrQuery("last_modified:[2013-01-03T00:00:00Z TO 2013-01-05T23:59:59Z]") );
SolrDocumentList docs = rsp.getResults();
for(int i=0;i<docs.getNumFound() ; i++) {
    System.out.println (docs.get(i).getFieldValue("id"));
}

私はそれを検索し、推奨事項を見つけました:

Z の代わりに +00:00 を書きます。たとえば、2002-10-10T12:00:00+05:00 は 2002-10-10T07:00:00Z です。

しかし、それを行うと、例外が発生します。

QueryResponse rsp = solr.query( new SolrQuery("last_modified:[2013-01-03T00:00:00+04:00 TO 2013-01-05T23:59:59+04:00]") );

問題を解決するにはどうすればよいですか?

4

1 に答える 1

7

残念ながら、Solr はこのZ形式しかサポートしておらず、私の知る限り、タイムゾーンの構文を理解していません。

明らかに、あなたは UTC ではないので、これを自分のタイム ゾーンに変換したいと考えています。これを行う最も簡単な方法は、正しいロケールを使用してコードで行うことです。たとえば、必要な範囲の UTC の時刻を計算します。

SimpleDateFormat genericDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");

SimpleDateFormat dateFormatUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
dateFormatUTC.setTimeZone(TimeZone.getTimeZone("UTC"));

Date start = genericDateFormat.parse("2013-01-03T00:00:00+0400");
Date end = genericDateFormat.parse("2013-01-03T23:59:59+0400");

String range = "[" + dateFormatUTC.format(start) + " TO " + dateFormatUTC.format(end) + "]"; 

range[2013-01-02T20:00:00Z TO 2013-01-03T19:59:59Z]UTC + 4 で 1 月 3 日の 1 日全体に対応する文字列が含まれます。

于 2013-01-08T11:44:17.987 に答える