2012-08-15 50 views
3

我試圖將下面的elasticsearch轉換爲pyes查詢,並且找不到關於如何使用範圍查詢(特別是時間戳)的示例。有人可以幫忙嗎?pyes範圍查詢語法

Elasticsearch查詢

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "field1": "abcd" 
      } 
     }, 
     { 
      "query_string": { 
      "default_field": "@field2", 
      "query": "efgh" 
      } 
     }, 
     { 
      "range": { 
      "timestamp": { 
       "gte": "2012-08-14T20:45:09.000Z" 
      } 
      } 
     } 
     ], 
     "must_not": [ 
     { 
      "term": { 
      "@field3": "ijkl" 
      } 
     } 
     ] 

    } 
    }, 
    "size": 1, 
} 

我的Python腳本(使用pyes)得到的結果,我使用pyes 0.19.1

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
from pyes import * 

conn = ES('127.0.0.1:9200') 


def main(): 
    try: 
     q1= TextQuery('field1','abcd') 
     q2=TextQuery('@field2','efgh') 
     q3=Range('@timestamp','2012-08-14T20:45:09.000Z','2012-08-14T20:45:09.000Z') 
     q4=TextQuery('@field3','ijkl') 
     q = BoolQuery(must=[q1, q2,q3],must_not=[q4]) 
     results = conn.search(q,size='1') 
     for r in results: 
      print r; 
    except: 
     pass 


if __name__ == '__main__': 
    main() 

回答

4

嘗試更換該Range

RangeQuery(qrange=ESRange('@timestamp',from_value='2012-08-14T20:45:09.000Z',to_value='2012-08-14T20:45:09.000Z')) 

我相信,只要您的時間戳值與映射中的格式相匹配,就可以工作。

+0

如果您在Elastic Search的Web界面中執行測試查詢(使用Head插件),那麼上述日期範圍將爲「2012-08-14 20:45:09 - > 2012-08-14 20 :45:09「,通過驗證。 – 2013-01-16 09:15:45