2016-08-19 2 views
0

둘 이상의 문서에서 필드 값이 동일한 경우 문서 수를 원합니다. DSL 쿼리를 작성하려면 어떻게해야합니까?동일한 값을 가진 둘 이상의 문서가있는 경우의 탄성 검색 계수

예 :

의 나는이 문서가 있다고 가정 해 봅시다 : foo는 동일한 값이 두 개 이상의 문서에서 발견 된 경우

{ _id:1, foo:1} 
{ _id:2, foo:1} 
{ _id:3, foo:3} 
{ _id:4, foo:2} 
{ _id:5, foo:3} 

나는 문서의 수를 원한다.

'aggregations':{ 
    'counts':{ 
     'buckets':[ 
      {'doc_count': 221,'key': '10284'}, 
      {'doc_count': 71,'key': '6486'}, 
      {'doc_count': 71,'key': '7395'} 
     ], 
     'doc_count_error_upper_bound': 0, 
     'sum_other_doc_count': 0 
    } 
} 

내가 다른 필드를 원하는 : 나는이 결과를 가지고

{ 
    "size": 0, 
    "aggs": { 
     "counts": { 
      "terms": { 
       "field": "foo" 
      } 
     } 
    } 
} 

: 자, 내가 같은 조건 쿼리를 실행 한 후 2

UPDATE

로 카운트를 원하는 total_count으로 3이라는 값을 가지고 있습니다. doc_count가 1보다 큰 3 개의 키가 있기 때문에 어떻게 할 수 있습니까?

+0

ES로만이 작업을 수행 할 수 있다고 생각하지 않습니다. 'min_doc_count : 2'' terms' 집계 후에 기본적으로 버킷 수를 필요로합니다. –

+0

ES 5에는 다음과 같은 내용이 있습니다 : https://github.com/elastic/elasticsearch/issues/19553 ('bucket_selector' aggregation을 위해서는 사용할 수있는'_bucket_count' 변수가 있습니다). 그 변수가 다른 스크립트에서도 사용될 수 있다면 여전히 보일 것입니다. –

+0

새로운'_bucket_count' 변수, @AndreiStefan을 언급하는 좋은 점 – Val

답변

1

이 같은 foo 필드에서 간단한 terms 집계를 시도 할 수 있습니다 :

{ 
    "size": 0, 
    "aggs": { 
     "counts": { 
      "terms": { 
       "field": "foo" 
      } 
     } 
    } 
} 

이를 실행 한 후, 키를 1

  • 를 얻을 수 있습니다 : 키 doc_count 2
  • 3 : doc_count 2
  • 키 1에 대한
  • : doc_count 1
+0

간단히 2를 얻을 수있는 방법이 있습니까? 나는이 쿼리를 매일 히스토그램과 함께 실행하여 매일 이러한 문서의 수를 찾고 하루에 수만 개의 각 키가있을 수 있기 때문에이 작업을 수행해야합니다. –

+0

쿼리를 실행하여 얻은 결과를 확인한 다음 얻을 수있는 결과의 필드를 설명 할 수 있습니까? (해당 정보로 질문을 업데이트하십시오.) – Val

+0

질문이 업데이트되었습니다. –

0

나는 ES로만 상자에서 이것을 할 수 있다고 생각하지 않습니다. 기본적으로 min_doc_count: 2terms 집합 후에 버킷 수가 필요합니다.

ES 5에는 https://github.com/elastic/elasticsearch/issues/19553 (bucket_selector 집합의 경우 사용할 수있는 _bucket_count 변수가 있습니다). 그 변수가 다른 스크립트에서도 사용될 수 있다면 여전히 보일 것입니다.