3

タイムスタンプ範囲のログをカウントするために、ESでリクエストを実行しようとしています。私のリクエストは機能しますが、彼女は常に同じ結果を返します。タイムスタンプフィルターが機能していないようです。カスタムタイムスタンプ範囲でservertest01のstatus_codeによってファセットを取得します。

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

1 に答える 1

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"}
           }
        }
    }
})
于 2013-03-14T10:11:00.723 に答える