2012-08-15 53 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