2016-09-28 71 views
1

我試圖在字段&上運行聚合忽略特定值!所以我有一個路徑,它包含一堆不同的url路徑。Elasticsearch:在字段上運行聚合並使用正則表達式匹配值過濾掉特定值

{ 
    "size": 0, 
    "aggs": { 
     "paths": { 
      "terms":{ 
       "field": "path" // Count the no unique path ~> values 
      } 

     } 
    }, 
    "filter": { 
     "bool": { 
     "must_not": [ 
      { 
       "regexp": { 
        // path MUST NOT CONTAIN media | cache 
        "path": { 
        "value": "(\/media\b|\bcache\b)" 
        } 
       } 
      } 
     ] 
     } 
    } 
} 

運行此,它不會過濾掉有一個包含緩存或媒體路徑的文件呢?!

如果我刪除過濾,相同的結果是,如果我離開它在返回

回答

2

你可以嘗試這樣的

{ 
    "size": 0, 
    "aggs": { 
    "path": { 
     "terms": { 
     "field": "path", 
     "exclude": ".*(media|cache).*" 
     } 
    } 
    } 
} 

注意excluding條款聚集內的值:來自documentation

注意:性能正則表達式查詢的準確性取決於選擇的常規表達式 。匹配類似*的所有內容非常緩慢,以及使用環顧正則表達式的 。如果可能的話,你應該嘗試 使用長前綴正則表達式開始

另一種方法之前,將擺脫在查詢階段這些文件,所以你可以在剩下的結果彙總移動你的過濾器進行查詢,然後。

編輯:隨着日期過濾器

你可以添加日期過濾器來查詢,這樣你只會得到過去一天的結果,像這樣的工作。

{ 
    "query": { 
    "range": { 
     "name_of_date_field": { 
     "gte": "now-1d" 
     } 
    } 
    }, 
    "size": 0, 
    "aggs": { 
    "path": { 
     "terms": { 
     "field": "path", 
     "exclude": ".*(media|cache).*" 
     } 
    } 
    } 
} 
+0

哦,是的,這是一個想法。但是這樣做的確很好:)我並不擔心它的表現,因爲它是由CRON觸發的,並且不需要很快! – James111

+0

是否可以添加日期範圍過濾器?所以我只從前一天獲得aggs而不是整個索引? – James111

+1

我已經添加日期過濾器來查詢,我希望它有幫助 – ChintanShah25

相關問題