2013-03-13 154 views
3

我試圖在我的ES上執行請求,以計算時間戳記範圍中的日誌。我的請求有效,但她總是返回相同的結果。時間戳過濾器似乎不起作用。 我想通過status_code爲自定義時間戳範圍內的servertest01檢索一個構面。ElasticSearch請求python中的範圍時間戳

import rawes 
from datetime import datetime 
from dateutil import tz 
paristimezone = tz.gettz('Europe/Paris') 

es = rawes.Elastic('127.0.0.1:9200') 

result = es.get('/_search', data={ 
    "query" : { "match_all" : {} 
       }, 
    "filter": { 
     "range": { 
      "@timestamp": { 
       "from": datetime(2013, 3, 11, 8, 0, 30, tzinfo=paristimezone), 
       "to": datetime(2013, 3, 12, 11, 0, 30, tzinfo=paristimezone)} 
        } 
      }, 
    "facets" : { 
     "error" : { 
     "terms" : { 
      "field" : "status_code" 
     }, 
     "facet_filter" : { 
      "term" : {"server" : "testserver01"} 
      } 
     } 
    } 
}) 

print(result['facets']) 

而在我的ES數據,時間戳字段是這樣的:

"@timestamp":"2013-03-12T00:02:29+01:00" 

謝謝:)

回答

4

搜索API中的filter元素被用來篩選查詢結果後切面的已計算。

如果你想過濾器既適用於查詢和到面,那麼你應該使用一個filtered查詢,而不是:

result = es.get('/_search', data={ 
    "query": { 
     "filtered": { 
      "query" : { "match_all" : {}}, 
      "filter": { 
       "range": { 
        "@timestamp": { 
         "from": datetime(2013, 3, 11, 8, 0, 30, tzinfo=paristimezone), 
         "to": datetime(2013, 3, 12, 11, 0, 30, tzinfo=paristimezone) 
        } 
       } 
      } 
     } 
    },   
    "facets" : { 
     "error" : { 
     "terms" : { 
      "field" : "status_code" 
     }, 
     "facet_filter" : { 
      "term" : {"server" : "testserver01"} 
      } 
     } 
    } 
}) 
+0

呀!非常感謝:)它的作品非常好。並感謝解釋! – Matt 2013-03-14 22:15:21