У меня есть базовая c Настройка системы Searchkick. Я хочу взять результаты и затем сгруппировать их по атрибуту для суммирования другого атрибута и т. Д. c.
Этот вопрос близок к моей проблеме:
Elasticsearch + searckick
, и единственным ответом было использование агрегаций. Я мог бы сделать это, но тогда я бы построил вызов активной записи для каждого из возвращенных ключей agg.
Вот что у меня есть:
BudgetItem.all.search("*", body_options: { aggs: { cbs_item_id: { terms: { field: "cbs_item_id" }, aggs: { "total": { "sum": { "field": "total" } } } } } } )
, что приводит к:
"aggregations"=>{"cbs_item_id"=>{"doc_count_error_upper_bound"=>0, "sum_other_doc_count"=>0, "buckets"=>[{"key"=>5, "doc_count"=>2, "total"=>{"value"=>2956.0}}, {"key"=>6, "doc_count"=>2, "total"=>{"value"=>7734.0}}]}}}>
в моих search_data у меня есть термин «cbs», который представляет собой текстовое значение, которое относится к «cbs_item_id». Я ищу этот результат:
"aggregations"=>
{"cbs_item_id"=>
{"doc_count_error_upper_bound"=>0, "sum_other_doc_count"=>0, "buckets"=>
[{"key"=>5, "doc_count"=>2, "total"=>{"value"=>2956.0}, "cbs"=>{"value"=>"MY CBS Related Field" }},
{"key"=>6, "doc_count"=>2, "total"=>{"value"=>7734.0}, "cbs"=>{"value"=>"MY OTHER CBS Related Field" }}]}}}
Это то, где у вас есть в инвентаре автомобилей и отдельная таблица car_colors ([id = 1, color = red], [id = 3, color = синий]. Я хочу найти автомобили заданного цвета, затем сгруппировать их и суммировать и т.д. c.
Я уверен, что, возможно, я упускаю что-то простое здесь.
ОБНОВЛЕНИЕ
Приближение:
BudgetItem.all.search("*", body_options: { aggs: { cbs_item_id: { terms: { field: "cbs_item_id" }, aggs: { cbs: { terms: { field: "cbs" } }, "total": { "sum": { "field": "total" } } } } } } )
, что приводит к:
"buckets"=>
[{"key"=>5, "doc_count"=>2, "total"=>{"value"=>2956.0}, "cbs"=>{"doc_count_error_upper_bound"=>0, "sum_other_doc_count"=>0, "buckets"=>[{"key"=>"001", "doc_count"=>2}]}},
{"key"=>6, "doc_count"=>2, "total"=>{"value"=>7734.0}, "cbs"=>{"doc_count_error_upper_bound"=>0, "sum_other_doc_count"=>0, "buckets"=>[{"key"=>"002", "doc_count"=>2}]}}]}}
Второй «ключ» s 001 и 002 - это данные, которые я ищу .