Module: ElasticGraph::GraphQL::Aggregation::NonCompositeGroupingAdapter
- Defined in:
- lib/elastic_graph/graphql/aggregation/non_composite_grouping_adapter.rb
Overview
Grouping adapter that avoids using a ‘composite` aggregation, due to limitations with Elasticsearch/OpenSearch.
Class Method Summary collapse
- .grouping_detail_for(query) ⇒ Object
- .meta_name ⇒ Object
- .prepare_response_buckets(sub_agg, buckets_path, meta) ⇒ Object
Class Method Details
.grouping_detail_for(query) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/elastic_graph/graphql/aggregation/non_composite_grouping_adapter.rb', line 19 def grouping_detail_for(query) date_groupings, term_groupings = query.groupings.partition do |grouping| grouping.is_a?(DateHistogramGrouping) end grouping_detail(date_groupings, query) do # We want term groupings inside date groupings so that, when our bucket aggregations might produce # inaccurate doc counts, the innermost grouping aggregation has `doc_count_error_upper_bound` on # its buckets allowing us to expose information about the accuracy. # # Date histogram aggregations do not include `doc_count_error_upper_bound` because, on their own, they are # always accurate, but they may not be accurate when used as a sub-aggregation of a `terms` aggregation. # # For more detail on the issue this ordering is designed to avoid, see: # https://discuss.elastic.co/t/accuracy-of-date-histogram-sub-aggregation-doc-count-under-terms-aggregation/348685 grouping_detail(term_groupings, query) do inner_clauses = yield inner_clauses = nil if inner_clauses.empty? AggregationDetail.new(inner_clauses, {}) end end end |
.meta_name ⇒ Object
15 16 17 |
# File 'lib/elastic_graph/graphql/aggregation/non_composite_grouping_adapter.rb', line 15 def "non_comp" end |
.prepare_response_buckets(sub_agg, buckets_path, meta) ⇒ Object
42 43 44 |
# File 'lib/elastic_graph/graphql/aggregation/non_composite_grouping_adapter.rb', line 42 def prepare_response_buckets(sub_agg, buckets_path, ) sort_and_truncate_buckets(format_buckets(sub_agg, buckets_path), .fetch("size")) end |