elasticsearch Terms 취 합 은 정확 한 취 합 이 아 닙 니 다.

ES 는 분포 식 을 바탕 으로 모든 검색 요청 을 모든 블록 버스터 에 나 누 어 단독 처리 하고 결 과 를 집계 합 니 다.취 합 도 이렇게 작 동 합 니 다.그러나 이러한 논리 하에 서 일부 집합 결과 가 정확 하지 않 을 수 있다. 즉, group 논 리 를 실현 하 는 terms 통 예 이다.
curl -X GET "localhost:9200/cars/transactions/_search" -H 'Content-Type: application/json' -d'
{
    "size" : 0,
    "aggs" : { 
        "popular_colors" : { 
            "terms" : { 
              "field" : "color",
              "size": 3
            }
        }
    }
}

여기 서 terms 취 합 을 실현 하여 color 를 근거 로 조별 통 계 를 실시 했다.결 과 는 각 color 의 개수 입 니 다.다음은 돌아 온 결과 입 니 다.
{
...
   "hits": {
      "hits": [] 
   },
   "aggregations": {
      "doc_count_error_upper_bound": 3,
      "sum_other_doc_count": 10,
      "popular_colors":
         "buckets": [
            {
               "key": "red", 
               "doc_count": 4 
            },
            {
               "key": "blue",
               "doc_count": 2
            },
            {
               "key": "green",
               "doc_count": 2
            }
         ]
      }
   }
}

결 과 를 되 돌려 주 는 aggregations 에는 세 가지 값 이 있 습 니 다: doccount_error_upper_bound、sum_other_doc_count 와 popularcolors。이 세 가지 값 은 ES 가 이번 집합 에 대한 평가 와 되 돌아 오 는 집합 결 과 를 나타 낸다.
doc_count_error_upper_bound: 이번 집합 에서 되 돌아 오지 않 았 지만 존재 할 수 있 는 잠재 적 집합 결 과 를 표시 합 니 다. 이 값 은 3 입 니 다. 표 는 red, blue, green 을 제외 하고 집합 결과 가 3 일 수도 있 습 니 다.복귀 결 과 를 보면 2 위 에 오 를 수도 있다.sum_other_doc_count: 이번 집합 에서 통계 되 지 않 은 문서 수 를 표시 합 니 다.ES 는 분포 식 배치 이기 때문에 서로 다른 문 서 는 여러 개의 조각 에 분산 되 어 있 습 니 다. 그러면 집합 할 때 각 조각 에 각각 집합 한 다음 에 조율 노드 에서 결 과 를 모 은 후에 돌아 갑 니 다.여기 서 는 상위 3 개 집합 을 요 청 했 기 때문에 각 조각 은 본 조각 중 상위 3 개 컬러 만 집합 했다.통계 되 지 않 은 다른 문서 수 는 각 노드 에서 되 돌아 온 후에 이 요 소 를 모 습 니 다.이 값 은 10 으로 10 개의 문서 가 이번 집합 에 참여 하지 않 았 음 을 나타 낸다.popular_colors: 집합 결과, 기본 값 은 높 은 것 에서 낮은 것 으로 배열 합 니 다.key 는 집합 요소 의 값 을 표시 합 니 다. doccount 는 요소 가 나타 나 는 횟수 를 표시 합 니 다.자, 여기 doccount 도 정확 하지 않 습 니 다.이 를 통 해 이번 중합 을 분석 하면 top 3 로 돌 아 왔 지만 다른 2 등 이 있 을 수 있 습 니 다. 그리고 doccount 는 상대 값 일 뿐 입 니 다.본질 적 으로 이런 오 차 는 분포 식 환경 에서 의 데이터 격 리 로 인해 발생 한 것 이다. 특히 topK 데 이 터 를 얻 을 때 노드 안의 topK 가 정확 하고 전체적인 topK 가 정확 하 다 는 것 을 보장 하지 않 는 다.그리고 원소 든 원소 든 대응 하 는 doccount, 모두 정확 하지 않 습 니 다.따라서 ES 가 정확 한 취 합 결 과 를 얻 으 려 면 max, min, avg 등 취 합 만 할 수 있 고 terms API 자체 가 정확 하지 않 으 며 추가 적 인 방법 으로 정확성 을 확보 하거나 향상 시 킬 수 있 습 니 다.
필름 을 가리 지 않 고 모든 데 이 터 는 shard 에 있 습 니 다.이렇게 하면 ES 가 집합 에서 모든 데 이 터 를 사용 하여 완전히 정확 하도록 할 수 있다.집합 에서 route 를 사용 하면 집합 해 야 할 데 이 터 를 같은 노드 로 이동 합 니 다.이 를 위해 서 는 데이터 구조 와 업무 논리 적 지원 이 필요 해 일반 데이터 가 실현 되 기 어렵다.취 합 결과 의 수 를 높이다.이렇게 하면 모든 조각 노드 가 더 많은 불필요 한 데 이 터 를 되 돌려 주 고 노드 를 조율 하여 데 이 터 를 모 을 때 집적 결과 의 정확성 을 높 일 수 있다.이런 방법 은 집합 결과 의 근사 하고 정확 함 만 보장 하 므 로 추천 합 니 다.

좋은 웹페이지 즐겨찾기