2017-07-24 36 views
0

我需要從給定的日期範圍內獲取所有的id抓取所有的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的列表。

唯一的時間字段爲我的文檔是「created_on」

回答

0

唯一的時間字段爲我的文檔是「created_on」

「created_on」是字段的名字嗎?所以你的查詢中不應該有"datetime"階段。範圍查詢語法使用字段的名稱,而不是類型(通過提供名稱ES將自動識別類型)。所以,如果你的領域被命名爲「created_on」:

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

您還可以檢查格式YYYY-MM-DD是一樣的,你用來定義app-test-logs類型的映射。如果不是,可以在範圍查詢中使用format參數。