Newer
Older
<?php
declare(strict_types=1);
namespace IQDEV\ElasticSearch\Converter\Request\Aggregation;
use IQDEV\ElasticSearch\Configuration;
use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Criteria\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
{
$queryFilterCollection = $this->criteria->getFilters()->getFilterCollectionByType(FilterType::QUERY);
if (false === $this->criteria->getSearch()->isEmpty() || false === $this->criteria->getFilters()->isEmpty()) {
$this->aggregations->add(
AggsFacetTerms::create(
'keyword_facet', 'keyword_facet'
)
);
$this->aggregations->add(
AggsFacetStats::create(
'number_facet', 'number_facet'
)
);
$filterAggregation = new FilterAggregation($this->configuration, $queryFilterCollection);
$filterAggregation->updateRequestAggregation($this->aggregations);
$fullAggregation = new FullAggregation($this->configuration, $queryFilterCollection);
$fullAggregation->updateRequestAggregation($this->aggregations);
}
if (false === $this->criteria->getAggs()->isEmpty()) {
$propertyAggregation = new PropertyAggregation(
$this->configuration,
$queryFilterCollection,
$this->criteria->getAggs(),
);
$propertyAggregation->updateRequestAggregation($this->aggregations);
}
}
public function getAggregation(): AggsCollection
{
return $this->aggregations;
}
}