2013-12-20 117 views
6

我已經從Mongo數據庫創建了彈性搜索索引。 在蒙戈的文件具有以下結構:彈性搜索範圍日期

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

該指數創建(顯然)沒有任何問題。 現在,我正嘗試使用彈性搜索來檢索兩個日期之間索引中的文檔。我已閱讀,我不得不使用範圍查詢,但我已經試過像

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安打,雖然應該有不少成果。我試圖輸入字符串而不是日期,但結果相同。

當我沒有過濾器,如執行基本的查詢:

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(); 

我得到的是點擊這個樣子:

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

凡外地time沒有格式ISODate("2013-10-17T09:23:56.131Z")了。總結一下,考慮到格式,在兩個日期(和時間)之間查詢Java代碼(和類型)是什麼?

+0

你可以添加實際JSON查詢構建器生成?如果沒有看到ES實際上看到的是什麼,真的很難說。 – drewish

回答

5

你在這一行很可能傳遞錯誤的字段名的範圍內查詢:

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

這也許應該是@timestamp(或者你使用存儲您的時間戳字段),而不是time 。此外,您看到Elasticsearch中沒有time字段用於包含您的示例文檔。這也指出了time字段沒有從Mongo正確轉換到Elasticsearch的問題。

+0

這對我來說就像一個魅力 – pandaadb

4

你可以嘗試

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

這是不贊成或什麼?因爲它不工作。 –