2015-09-04 132 views
0

我一直在從自動生成的時間戳移動到映射的時間戳,並且查詢不再工作。當使用自動生成的時間戳,我是能夠執行這種查詢:在映射的時間戳上過濾

FilterBuilder filter = FilterBuilders.rangeFilter("_timestamp").from(zonedDateTime.toLocalDate().toString()).to(zonedDateTime.plusHours(1).toLocalDate().toString()); 

而且通過最新表述,如「現在-1H」會的工作。現在,我已經介紹了以下映射:

"collections": { 
    "_timestamp": { 
    "enabled": true, 
    "path": "my_date", 
    "ignore_missing": false 
    }, 
    "properties": { 
    "author": { 
     "type": "string", 
     "index": "not_analyzed" 
    }, 
    "name": { 
     "type": "string", 
     "analyzer": "lowercase" 
    }, 
    "my_date": { 
     "type": "date" 
    } 
    } 
} 

我存儲my_date爲Unix紀元格式,我不能再查詢:

FilterBuilders.rangeFilter("_timestamp").from(zonedDateTime.toLocalDate().toString()).to(zonedDateTime.plusHours(1).toLocalDate().toString()); 

返回空的結果,而查詢

FilterBuilders.rangeFilter("my_date").from(zonedDateTime.toLocalDate().toString()).to(zonedDateTime.plusHours(1).toLocalDate().toString()); 

與異常

from[-1],size[-1]: Parse Failure [Failed to parse source [{"query":{"filtered":{"query":{"match_all":{}},"filter":{"range":{"my_date":{"from":"2015-09-04T19:52:15.001+01:00","to":"2015-09-04T21:52:15.001+01:00","include_lower":true,"include_upper":true}}}}}}]]]; nested: NumberFormatException[For input string: "2015-09-04T19:52:15.001+01:00"]; 
失敗

它看起來像我可以做的唯一的查詢是通過在my_date上使用時間戳的數字值。有什麼更好的,我可以希望?

回答

2

你的問題還有一些缺失。我只能猜測你可能已經發布以來的時間,而不是毫秒的數字,因爲你的映射沒有正確應用,所以還有一些你沒有透露的錯誤。以下是基於您迄今爲止選擇顯示的數據的示例,它可以很好地工作。請嘗試修改示例以符合您的情況。

curl -XDELETE localhost:9200/test 
curl -XPUT localhost:9200/test -d '{ 
    "mappings": { 
     "collections": { 
      "_timestamp": { 
       "enabled": true, 
       "path": "my_date", 
       "ignore_missing": false 
      }, 
      "properties": { 
       "my_date": { 
        "type": "date" 
       } 
      } 
      } 
     } 
    } 
}' 
curl -XGET "localhost:9200/test/_mapping?pretty" 
curl -XPOST "localhost:9200/test/collections?refresh" -d '{"my_date": "1441421651000"}' 
curl -XGET "localhost:9200/test/collections/_search?pretty" -d '{ 
    "query": { 
     "filtered": { 
      "query": { 
       "match_all": {} 
      }, 
      "filter": { 
       "range": { 
        "my_date": { 
         "from": "2015-09-04T19:52:15.001+01:00", 
         "to": "2015-09-05T21:52:15.001+01:00", 
         "include_lower": true, 
         "include_upper": true 
        } 
       } 
      } 
     } 
    } 
}' 
+0

我剛剛錯誤地複製了一部分映射,my_date在屬性節點內正確。我已經更新了這個問題,還注意到如果我使用數字時間戳查詢my_date屬性,它可以正常工作 – Edmondo1984

+0

更新了答案。 – imotov

+0

您正在使用哪個版本的ES?您正在運行的查詢是爲我返回的ParseException – Edmondo1984