1. Elasticsearch는 집계 후 페이징을 지원하며 그 이유는 무엇입니까?
아니요, Elasticsearch 직원이 어떻게 해석했는지보세요.
1) 성능 관점- 집계 된 페이징으로 인해 많은 레코드에서 성능 문제가 발생합니다.
2) 정확성 관점 -집계 된 문서 수가 정확하지 않습니다.
두 번째 페이지의 첫 번째 항목이 첫 번째 페이지의 마지막 요소보다 많은 수를 갖는 등 이상한 일이 발생할 수 있습니다.
2. Elasticsearch는 집계 후 페이징을 구현하기 위해 무엇을해야합니까?
솔루션 : 조건을 충족하는 총 데이터 수를 표시해야합니다. 즉, 전체 데이터를 집계하고 특정 규칙에 따라 정렬해야합니다.
집계하려는 데이터의 양이 많으면 (100,000, 수백만 또는 수천만) 필연적으로 속도가 느려지고 시간이 초과 될 수 있습니다.
1 단계 : 전체 집계, 크기가 최대 값 인 2147483647로 설정됩니다 .
ES5.X / 6.X 버전은
32 비트 운영 체제에서 가장 큰 기호 정수 상수 인 2 ^ 31-1과 같은 2147483647로 설정되고 ES1.X 2.X 버전은 0으로 설정됩니다.
예 :
"aggregations": {
"statistics_assets": {
"terms": {
"field": "one_account.one_account_no",
"size": 2147483647,
"order": {
"assets": "asc"
}
},
"aggregations": {
"assets": {
"sum": {
"field": "assets.merge"
}
}
}
}
}
집계 결과가 수백 또는 수천에 불과하므로 위의 크기는 최대 값 인 2147483647로 설정됩니다 (한 번에 반환 할 수없는 집계 결과가 많은 경우 논의 될 bucket_sort 사용을 고려하십시오.) 집계 결과가 한 번에 반환 된 후에는 결과의 지정된 부분을 얻기 위해 매개 변수를 페이징 할 수 있습니다 (Java는 목록 또는 LinkedHashMap에 저장할 수 있으며 HashMap 저장 순서가 변경 될 수 있음).
2 단계 : 집계 결과를 메모리에 저장하고 Java를 사용하여 목록 또는 맵 저장을 고려합니다.
3 단계 : 메모리 내 페이징, 목록에 저장된 데이터가 페이징되고 Java로 반환됩니다.
페이지 당 10 개의 데이터가있는 경우 첫 번째 페이지는 목록에서 0 ~ 9 번째 요소를 가져 오는 식입니다.
요약 :
이 기사에서 설명하는 방법은 집계 된 데이터의 양이 크지 않고 집계 된 결과가 많지 않은 경우 모든 집계 된 결과가 반환 된 다음 Java 백엔드가 목록을 사용하여 저장하고 페이지를 표시하는 것입니다.
단점 :
그러나이 메서드의 데이터 양이 너무 많으면 es 집계 중에 시간이 초과되어 매우 느려지고 집계 결과가 많이 생성되면 한 번에 Java 측으로 돌아 가지 않습니다. 집계 된 데이터가 적고 집계 된 결과를 한 번에 반환하지 않으려는 경우 bucket_sort 사용을 고려할 수 있습니다
. 예를 들면 다음과 같습니다.
"aggregations": {
"statistics_assets": {
"terms": {
"field": "one_account.one_account_no",
"size": 245645500
},
"aggregations": {
"assets": {
"sum": {
"field": "assets.merge"
}
},
"assets_bucket_sort": {
"bucket_sort": {
"sort": {
"assets": {
"order": "desc"
}
},
"from": 0,
"size": 10
}
}
}
}
}
다음 공식 문서 또는 기사를 참조하십시오.
버킷 정렬 집계 편집
쿼리 집계에 버킷 정렬을 추가하는 방법
Aggregation + sorting + pagination in elastic search
집계 된 데이터가 많고 bucket_sort를 사용할 수없는 경우에는 미들 오피스 또는 데이터 부서에서 새 필드를 추가하도록하는 것이 좋습니다. 그러면 데이터가 다시 처리되고 계산되어 집계 될 데이터가 새로 추가 된 필드에 추가되므로 집계 할 필요없이 필드의 값을 직접 가져옵니다.
참조 기사 :
Elasticsearch 사후 집계 페이징 심층 설명