2016-09-28 2 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 regexp 쿼리의 중요도는 일반 표현식에 크게 의존합니다. . * 같은 모든 것을 매치하는 것은 매우 느리고 회귀 정규식을 사용하는 입니다. 가능하면 정규 표현식은 당신이 남아있는 결과를 집계 한 후 쿼리 필터를 이동하고 수 있도록 쿼리 단계에서 해당 문서를 제거하는 것입니다

또 다른 방법을 시작하기 전에, 당신은 긴 접두사를 사용 를 시도해야한다 .

편집 : 날짜 필터는

당신은 일의 결과 과거에만 얻을 것 너무 쿼리 날짜 필터를 추가 할 수 있습니다, 이런 식으로 뭔가가 작동합니다.

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

오, 그래, 그거야. 하지만이 작업은 정말 잘됩니다. CRON에 의해 ​​트리거되고 빠른 작업이 필요하지 않기 때문에 성능에 대해 걱정하지 않아도됩니다. – James111

+0

기간 필터를 추가 할 수 있습니까? 그래서 전 지수 대신에 전날의 지수 만 얻었습니까? – James111

+1

쿼리에 날짜 필터를 추가했습니다. 도움이되기를 바랍니다. – ChintanShah25