2016-10-06 7 views
0

그룹화 된 문서 중 적어도 하나에 특정 내용이있는 필드가 있어야한다는 조건으로 집계 결과를 필터링해야합니다. 내 데이터는 여러 프로세스에서 발생한 흔적의 일종으로 고유 한 프로세스에는 많은 흔적이 있습니다. 내 데이터의탄성 검색 : 그룹화 된 문서의 조건으로 필터링

예 : 예를 들어

proc_id event timestamp 
1  ON  1000 
1  EV1  1001 
2  ON  1002 
1  OFF  1003 
3  ON  1004 
2  EV2  1005 
3  EV1  1006 
3  EV_END 1007 
2  EV_END 1008 

, 나는 proc_id에 의해 그룹에 적어도 하나의 EV_END 이벤트가 바로 proc_id가 필요합니다. proc_id의 모든 흔적을 사용하여 나중에 (시간 및 이벤트 수 같은) 처리해야하기 때문에 EV_END 추적 만 사용하는 것은 해결책이 아닙니다.

버전 2.x에서 bucket_selectors와 스크립트가 있지만 그 생각이 들지 않습니다.

내가하고 싶은 것과 의사 쿼리 :

curl -XPOST 'localhost:9200/proc/_search?pretty' -d ' 
{ 
    "query": { "match_all": {} }, 
    "aggs": { 
     "group_by_proc_id": { 
      "terms": { 
      "field": "proc_id", 
      **ONLY if proc has at least one trace with event == 'EV_END'** 
      } 
     } 
    } 
}' 
+1

게시 한 샘플 데이터에 대해 원하는 출력을 제공 할 수 있습니까? – ChintanShah25

+0

정확히 출력이 아니지만 "의사 쿼리"가 아이디어를 나타냅니다. – Hamlett

+0

솔루션이 도움이 되었습니까? – ChintanShah25

답변

0

난 당신이 EV_END 이벤트가 존재하는 곳 proc_ids를 얻을 수 filter aggregation를 사용할 수 있습니다 생각합니다.

{ 
    "query": { 
    "match_all": {} 
    }, 
    "size": 0, 
    "aggs": { 
    "EV_END": { 
     "filter": { 
     "term": { 
      "event": "EV_END" 
     } 
     }, 
     "aggs": { 
     "proc_group": { 
      "terms": { 
      "field": "proc_id", 
      "size": 10 
      } 
     } 
     } 
    } 
    } 
}