2013-12-20 19 views
6

Mongoデータベースから弾性検索インデックスを作成しました。 Mongoの中 の文書には、以下の構造を有する:弾性検索範囲の日付

{ 
    "_id" : ObjectId("525facace4b0c1f5e78753ea"), 
    "time" : ISODate("2013-10-17T09:23:56.131Z"), 
    "type" : "A", 
    "url" : "www.google.com", 
    "name" : "peter", 
} 

インデックスは何の問題もなく(明らかに)作成されました。 今、Elastic Searchを使用して、2つの日付間のインデックス内のドキュメントを取得しようとしています。私は範囲のクエリを使用する必要があることを読んだが、何度も試してみた

MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "peter").type(Type.PHRASE).minimumShouldMatch("99%"); 
LocalDateTime toLocal = new LocalDateTime(2013,12,18, 0, 0); 
Date to = toLocal.toDate(); 
LocalDateTime fromLocal = new LocalDateTime(2013,12,17, 0, 0); 
Date from = fromLocal.toDate(); 
RangeQueryBuilder queryDate = QueryBuilders.rangeQuery("time").to(to).from(from); 
FilterBuilder filterDate = FilterBuilders.queryFilter(queryDate);  

srb = esH.client.prepareSearch("my_index"); 
srb.setQuery(queryBuilder); 
srb.setFilter(filterDate); 
sr = srb.execute().actionGet(); 

多くの結果があるはずだが、私は0ヒットを得る。私は日付の代わりに文字列を入力しようとしましたが、同じ結果です。

私のようなフィルターなしで基本的なクエリを実行する場合:フィールドtimeはもうフォーマットISODate("2013-10-17T09:23:56.131Z")を持っていない

{ 
"_index" : "my_index", 
"_type" : "type", 
"_id" : "5280d3c2e4b05e95aa703e34", 
"_score" : 1.375688, "_source" : {"type":["A"],"time":["Mon Nov 11 13:55:30 CET 2013"],"name":["peter"]} 
} 

MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "peter").type(Type.PHRASE).minimumShouldMatch("99%"); 

SearchRequestBuilder srb = esH.client.prepareSearch("my_index"); 
rb.setQuery(queryBuilder); 
SearchResponse sr = srb.execute().actionGet(); 

私はそれでヒットは次のようになり得ます。

要約すると、フォーマットを考慮して、2つの日付(および時刻)の間でクエリを実行するJavaコード(およびタイプ)は何でしょうか?

+0

を試すことはできますか? ESが実際に見ていることを見ずに何が起こっているのかを言うのは本当に難しいです。 – drewish

答えて

5

おそらく、この行の範囲クエリに間違ったフィールド名を渡しています

RangeQueryBuilder queryDate = QueryBuilders.rangeQuery("time").to(to).from(from);

それはおそらく@timestamp(または、あなたのタイムスタンプを保存するために使用しているフィールド)の代わりに、timeする必要があります。さらに、含まれているサンプル文書では、Elasticsearchにはtimeフィールドがないようです。これは、timeフィールドがMongoからElasticsearchに正しく変換されなかったという問題も指摘しています。

+0

これは私のための魅力のように働いた – pandaadb

4

あなたはビルダーが生成されていることを、実際のJSONクエリを追加することができます

FilterBuilders.rangeFilter("@timestamp").from("from time").to("toTime") 
+0

これは非難されるか何かであるか。それは動作していません。 –

関連する問題