使用查询从elastric搜索中获取所有id

时间:2017-07-24 19:17:19

标签: python elasticsearch

我需要从给定的日期范围中获取所有ID:

def search(index_name, doc_type, esClient):
try:
    res = esClient.search(index="apps-test", doc_type='app-test-logs', body = {
           "query": { 
              "bool": {
                "filter": [
                    { "range": 
                       { "datetime": 
                        { "gte": "2017-07-22",
                          "lte":"2017-07-24", }}}
                 ]
               }
         }
                                                })
    print(res)
except Exception as ex:
    print(ex)

哪个回报我

{u'hits':{u'hits':[],u'total':0,u'max_score':None},u'_shards':{u'successful':5,u'failed' :0,u'total':5},u'took':41,u'timed_out':False}

我正在寻找的是获取给定日期范围之间所有ID的列表。

我的doc的唯一日期时间字段是“created_on”

1 个答案:

答案 0 :(得分:0)

  

我的doc的唯一日期时间字段是" created_on"

" created_on"是该字段的名称?因此,查询中不应包含"datetime"个pharase。范围查询语法使用字段的名称,而不是类型(通过提供名称ES将自动识别该类型)。因此,如果您的字段名为" created_on":

{
   "query": { 
      "bool": {
        "filter": [
            { "range": 
               { "created_on": 
                  { "gte": "2017-07-22",
                    "lte":"2017-07-24"
                  }
               }
            }
          ]
        }
}

您还可以检查格式yyyy-MM-dd是否与用于定义app-test-logs类型映射的格式相同。如果没有,您可以在范围查询中使用format参数。