ElasticSearch накладывает ограничение на результаты группы - PullRequest
0 голосов
/ 27 апреля 2018

Я нахожусь в ситуации, когда я применил лимит для ElasticSearch результаты, но это не работает для меня. Я прошел через ES руководство ниже мой код:

module Invoices
    class RestaurantBuilder < Base
      def query(options = {})
        buckets = {}
        aggregations = {
          orders_count: { sum: { field: :orders_count } },
          orders_tip: { sum: { field: :orders_tip } },
          orders_tax: { sum: { field: :orders_tax } },
          monthly_fee: { sum: { field: :monthly_fee } },
          gateway_fee: { sum: { field: :gateway_fee } },
          service_fee: { sum: { field: :service_fee } },
          total_due: { sum: { field: :total_due } },
          total: { sum: { field: :total } }
        }

        buckets_for_restaurant_invoices buckets, aggregations, options[:restaurant_id]

        filters = []
        filters << time_filter(options)

        query = {
          query: { bool: { filter: filters } },
          aggregations: buckets,
          from: 0,
          size: 5
        }
        query
      end

      def buckets_for_restaurant_invoices(buckets, aggregations, restaurant_id)
        restaurant_ids(restaurant_id).each do |id|  
          buckets[id] = {
            filter: { term: { restaurant_id: id } },
            aggregations: aggregations
          }
        end
      end

      def restaurant_ids(restaurant_id)
        if restaurant_id
          [restaurant_id]
        else
          ::Restaurant.all.pluck :id
        end
      end
    end
end

функция restaurant_ids возвращает около 5,5 тыс. Ресторанов, поэтому в этом В случае, если я получил ошибку "circuit_breaking_exception", "reason": "[request] Данные слишком велики, данные для [] будут [622777920 / 593,9 МБ], что превышает предел [622775500 / 593.9mb] ". Вот почему я хочу применить некоторое ограничение, чтобы я может получить только несколько сотен записей одновременно.

Может ли кто-нибудь направить меня туда, где я делаю неправильно?

1 Ответ

0 голосов
/ 27 апреля 2018

Чтобы ограничить объем данных, чтобы избежать этой ошибки, нужно настроить indices.breaker.request.limit.

...