2016-09-28 3 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

注:perfor正規表現クエリのマンスは、普通の正規表現 の式に大きく依存します。 。*のようなものすべてにマッチするのは非常に遅く、またlookaroundの正規表現を使用すると です。可能であれば、あなたの正規表現は、あなたが照会し、その後、残りの結果に集約するためにあなたのフィルタを動かすことができるように別のアプローチは、クエリの段階でこれらのドキュメントを取り除くことであろう

を開始する前に、長い接頭辞を使用 に試してみてください。

EDIT:あなたが唯一の過去の日の結果になるだろうように、日付フィルタ

であなたはこのような何かがうまくいく、クエリに日付フィルタを追加することができます。

{ 
    "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

関連する問題