2017-11-19 22 views
1

을 나뿐만 아래 elasticsearch 요청이 : 그냥 내가 많이 검색 한어떻게 Elasticsearch의 집계에 페이징을 추가하는

select poi_id, sum(price) from table group by poi_id limit 0,2 

처럼

{ 
    "size":0, 
    "aggs":{ 
     "group_by_state":{ 
      "terms":{ 
       "field":"poi_id" 
      }, 
      "aggs":{ 
       "sum(price)":{ 
        "sum":{ 
         "field":"price" 
        } 
       } 
      } 
     } 
    } 
} 

내가이 requst에 페이징을 추가 할을 , 그것에 관한 링크를 찾았습니다 : https://github.com/elastic/elasticsearch/issues/4915.

하지만 여전히 구현 방법을 얻지 못했습니다.

내 응용 프로그램이 아닌 Elasticsearch 자체에서 구현할 수있는 방법이 있습니까?

답변

1

귀하의 요청에 from 및 size 매개 변수를 사용할 수 있습니다. 자세한 내용은 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html을 참조하십시오. 귀하의 요청은 다음과 같습니다 :

{ 
    "from" : 0, 
    "size" : 10, 
    "aggs":{ 
     "group_by_state":{ 
      "terms":{ 
       "field":"poi_id" 
      }, 
      "aggs":{ 
       "sum(price)":{ 
        "sum":{ 
         "field":"price" 
        } 
       } 
      } 
     } 
    } 
} 
+0

크기가 집계에 적합하지 않은 것처럼 보입니다. 내 집계 요청에 from : 0 및 size : 1을 추가하고 elasticsearch는 세 개의 버킷을 반환합니다. – lulijun

+0

좋습니다. 크기 매개 변수는 "필드": "가격"매개 변수 아래에 있어야합니다. 그러나 집계에서의 페이지 매김은 탄성 검색에서 지원되지 않는 것으로 보입니다. 예 : 몇 가지 stackoverflow 스레드가 있습니다. https://stackoverflow.com/questions/27776582/aggregation-sorting-pagination-in-elastic-search - 실제 es 버전에서 같은 것 같습니다 ... – Ohlsen1980

0

현재 집계 결과를 페이징하기위한 솔루션을 찾고 있습니다. 당신이 사용하고자하는 것은 partition입니다. 공식 문서의이 섹션은 매우 유용합니다. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_filtering_values_with_partitions

예를 적용하려면 terms 설정이 다음과 같이 업데이트됩니다.

{ 
    "size":0, 
    "aggs":{ 
     "group_by_state":{ 
      "terms":{ 
       "field":"poi_id", 
       "include": { 
        "partition": 0, 
        "num_of_partitions": 100 
       }, 
       "size": 10000 
      }, 
      "aggs":{ 
       "sum(price)":{ 
        "sum":{ 
         "field":"price" 
        } 
       } 
      } 
     } 
    } 
} 

이 의지 그룹에게 각각 10,000 결과의 최대 크기 (size) 100 개 파티션 (num_of_partitions)에 결과 및 최초의 파티션을 검색 (partition: 0)

당신은 이상이있는 경우 (그리고 모든 값을 반환하려는) 필드에 10k 고유 값을 사용하는 경우 size 값을 늘리거나 필드의 카디널리티를 기준으로 sizenum_of_partitions을 동적으로 계산할 수 있습니다. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#search-aggregations-metrics-cardinality-aggregation

show_term_doc_count_error 설정을 사용하면 집계에서 정확한 개수를 반환하도록 할 수 있습니다. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_per_bucket_document_count_error

희망이 있습니다.