2017-04-14 2 views
0

ElasticSearch에서 문제가 발생했습니다.ElasticSearch : 필터링 된 고유 레코드에 대한 집계

필터링 된 데이터 세트에서 고유 한 문서를 가져 와서 그 위에 집계를 수행하려고합니다.

우리의 데이타 세트는 다음과 같이 보인다 .. ID 객체 속성 1 Property2 12 123 Test1을 Fest2 23 234 테스트 3 Fest4 5 123 Test1을 Fest2 55 123 Test2를 Fest4 3 234 Test2를 Fest2

I을 property2를 기반으로 장치를 필터링하고 고유 한 필터링 된 레코드의 property1을 집계 (그룹화) 할 수 있습니다. 누군가 나를 도와 줄 수 있습니까?

고유 한 레코드 필터링 및 가져 오기.

{ 
"size": 0, 
"query": { "match": { "Property2": "Fest2" }}, 
"aggs": { 
    "Unique-Object": { 
     "terms": { 
     "field": "object.keyword", 
     "size": 20 
}, 
"aggs": { 
    "top_uids_hits": { 
      "top_hits": { 
      "sort": [ 
       { 
       "_score": { 
        "order": "desc" 
       } 
       } 
      ], 
      "size": 1 
      } 
     } 
     } 
    } 
    } 
}' 

나는 위의 DSL의 출력에 다음과 같이 속성 1에 의해 그룹에 같은 수 ...이에 수있는 몇 가지 중 하나 개 던져 빛을?

그룹 속성 1

"aggs": { 
"Property1_count": { 
"terms": { 
"field": " Property1.keyword" 
} 

감사 아룬 S

+0

plz 귀하의 요구 사항에 대한 SQL 쿼리를 만들 수 있습니까, 그래서 당신의 질문은 명확 할 것입니까? . –

+0

감사합니다. 원시 SQL 쿼리는 이와 같은 것입니다. 선택 테이블 (IDTINCT id)에서 Select2 where Property2 = 'xxx'group by property1 – Manoj

+0

내 대답이 업데이트되었습니다. ID와 속성 1에서 두 그룹을 사용해야한다고 생각합니다. 테스트 데이터를 확인하십시오. 나는 내 시스템에서 테스트했다. –

답변

0

으로 나는이 쿼리해야한다고 생각합니다. 이것을 사용하여 agg 내부의 agg를 확인하십시오 : - 카디널리티 사용 link.

{ 
    "_source":false, 
    "query": { 
     "match": { 
      "Property2": "xxxx" 
     } 
    }, 
    "aggregations": { 
     "byProperty1": { 
      "terms": { 
       "field": "property1" 
      }, 
      "aggs": { 
       "byId": { 
        "cardinality": { 
         "field": "id" 
        } 
       } 
      } 
     } 
    } 
} 

자바 구현의 경우 내 answer을 확인하십시오. 이 질문 그룹을 여러 필드 (예 : link)로 확인하십시오.

관련 문제