Skip to content
Snippets Groups Projects
Aggregation.php 2.09 KiB
Newer Older
<?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);

//        foreach ($postFilterCollection as $filterGroup) {
//            /** @var FilterGroupCollection $filterGroup */
//
//            foreach ($filterGroup as $filter) {
//                /** @var Filter $filter */
//
//                $filterAggregation = new FilterAggregation($this->configuration, $filter, $postFilterCollection);
//
//                if ($aggregation = $filterAggregation->getFilterAggregation()) {
//                    $this->aggregations->add($aggregation);
//                }
//            }
//        }
        $fullAggregation = new FullAggregation($this->configuration, $postFilterCollection);

        $this->aggregations->add($fullAggregation->getKeywordAggregation());
        $this->aggregations->add($fullAggregation->getRangeAggregation());
    }

    public function getAggregation(): AggsCollection
    {
        return $this->aggregations;
    }
}