<?php declare(strict_types=1); namespace IQDEV\ElasticSearch\Converter\Request\Aggregation; use IQDEV\ElasticSearch\Configuration; use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Request\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Request\Filter\Filter; use IQDEV\ElasticSearch\Request\Filter\FilterType; use IQDEV\ElasticSearch\Search\Aggs\AggsCollection; use IQDEV\ElasticSearch\Search\Aggs\AggsFacetStats; use IQDEV\ElasticSearch\Search\Aggs\AggsFacetTerms; class Aggregation { public function __construct( private readonly Configuration $configuration, private readonly Criteria $criteria, private readonly AggsCollection $aggregations = new AggsCollection(), ) { $this->convertToQuery(); } public function convertToQuery(): void { $this->aggregations->add( AggsFacetTerms::create( 'keyword_facet', 'keyword_facet' ) ); $this->aggregations->add( AggsFacetStats::create( 'number_facet', 'number_facet' ) ); $postFilterCollection = $this->criteria->getFilters()->getFilterCollectionByType(FilterType::POST); $filterAggregation = new FilterAggregation($this->configuration, $postFilterCollection->getKeywordFilters()); $filterAggregation->updateRequestAggregation($this->aggregations); $fullAggregation = new FullAggregation($this->configuration, $postFilterCollection); $fullAggregation->updateRequestAggregation($this->aggregations); } public function getAggregation(): AggsCollection { return $this->aggregations; } }