2016-07-15 110 views
0

我試圖通過以下查詢查詢有關elasticsearch中文檔的統計信息。問題是,我試圖忽略具有某些值的文件logger,但我不知道如何。下面的查詢將所有正確的文檔選擇爲該集合,但它不排除具有不希望的值的文檔。在彈性搜索中過濾OUT匹配文檔與聚合

任何建議,非常歡迎。

{ 
    "query": { 
    "bool": { 
     "filter": { 
     "bool": { 
      "must_not": { 
      "terms": { 
       "logger": [ 
       "experimentsplitsegmentlogger_errors", 
       "ExperimentLogger" 
       ] 
      } 
      } 
     } 
     }, 
     "must_not": { 
     "terms": { 
      "logger": [ 
      "experimentsplitsegmentlogger_errors", 
      "ExperimentLogger" 
      ] 
     } 
     }, 
     "must": { 
     "exists": { 
      "field": "count" 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "keys": { 
     "filter": { 
     "bool": { 
      "must_not": { 
      "terms": { 
       "logger": [ 
       "experimentsplitsegmentlogger_errors", 
       "ExperimentLogger" 
       ] 
      } 
      } 
     } 
     }, 
     "terms": { 
     "field": "logger" 
     }, 
     "aggs": { 
     "hostnames": { 
      "terms": { 
      "field": "hostname" 
      }, 
      "aggs": { 
      "pids": { 
       "terms": { 
       "field": "pid" 
       }, 
       "aggs": { 
       "time_stats": { 
        "stats": { 
        "field": "timestamp" 
        } 
       }, 
       "count_stats": { 
        "stats": { 
        "field": "count" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    }, 
    "size": 0 
} 
+0

您的過濾器和術語聚合是在同一水平上,條款必須要一個級別嵌套在'aggs' filter'的',爲什麼你有過濾器的3倍,一週時間應該工作,如果它是正確的執行。 –

+0

@SumitKumar我有三次,因爲它不工作。如果您能以您的意思爲例來回答問題,我將不勝感激,因爲我發現您的意思不明確。 – Marcin

回答

1

這應該爲你工作,因爲我從聚集在同一水平取出filterterms

{ 
    "query": { 
    "bool": { 
     "filter": { 
      "not": { 
      "terms": { 
       "logger": [ 
       "experimentsplitsegmentlogger_errors", 
       "ExperimentLogger" 
       ] 
      } 
      } 
     }, 
     "must": { 
     "exists": { 
      "field": "count" 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "keys": { 
     "terms": { 
     "field": "logger" 
     } 
    } 
    }, 
    "size": 0 
} 
+0

謝謝,我會在第二時間嘗試。我的印象是'不'過濾器已被棄用。 – Marcin

+0

@Marcin是'not'已被棄用。你應該用'must_not'來使用'bool'。你可以在查詢中替換它們,兩者都會給你相同的結果。 –

+0

這很好。我實際上意識到,我的問題的很大一部分是我將更改保存到與正在運行的文件不同的文件,因此我不確定我的問題是否真實,但我確信此答案是真實的和工作。 – Marcin