Commit ce4c10c7 authored by Nikita Chernykh's avatar Nikita Chernykh
Browse files

ugly commit

parent 7c725de6
Loading
Loading
Loading
Loading
+4 −16
Original line number Diff line number Diff line
@@ -41,23 +41,11 @@ class Aggregation

       $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);
       $filterAggregation = new FilterAggregation($this->configuration, $postFilterCollection->getKeywordFilters());
       $filterAggregation->updateRequestAggregation($this->aggregations);

        $this->aggregations->add($fullAggregation->getKeywordAggregation());
        $this->aggregations->add($fullAggregation->getRangeAggregation());
       $fullAggregation = new FullAggregation($this->configuration, $postFilterCollection);
       $fullAggregation->updateRequestAggregation($this->aggregations);
    }

    public function getAggregation(): AggsCollection
+28 −43
Original line number Diff line number Diff line
@@ -7,9 +7,11 @@ namespace IQDEV\ElasticSearch\Converter\Request\Aggregation;
use IQDEV\ElasticSearch\Configuration;
use IQDEV\ElasticSearch\Converter\Request\FilterQuery;
use IQDEV\ElasticSearch\Request\Filter\Collection\FilterCollection;
use IQDEV\ElasticSearch\Request\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Request\Filter\Filter;
use IQDEV\ElasticSearch\Request\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Search\Aggs\Aggs;
use IQDEV\ElasticSearch\Search\Aggs\AggsCollection;
use IQDEV\ElasticSearch\Search\Aggs\AggsFacetTerms;
use IQDEV\ElasticSearch\Search\BoolQuery\Query;
use IQDEV\ElasticSearch\Search\Nested;
@@ -20,57 +22,40 @@ class FilterAggregation

    public function __construct(
        private readonly Configuration $configuration,
        private readonly Filter $filter,
        private readonly FilterCollection $filterCollection,
    ) {
        if ($filter->value() instanceof FilterKeyword) {
            $this->setAggregation();
        }
    }

    private function setAggregation(): void
    public function updateRequestAggregation(AggsCollection $original): void
    {
        $this->aggregation = new Aggs(
            $this->getKey('keyword', $this->filter->field()->value())
        );
        foreach ($this->filterCollection as $filterGroup) {
            /** @var FilterGroupCollection $filterGroup */

            foreach ($filterGroup as $filter) {
                /** @var Filter $filter */

                $field = $filter->field()->value();

        $this->aggregation->addAggs(
                $aggregation = new Aggs($this->getKey('keyword', $field));
                $aggregation->addAggs(
                    AggsFacetTerms::create(
                        'agg_special',
                        'keyword_facet'
                    )
                );

//        $queryKeywordFiltered = new Query();
//
//        $keywordFilterCollection = $this->filterCollection->getKeywordFilters([$this->filter->field()->value()]);
//        $rangeFilterCollection = $this->filterCollection->getNumberFilters();
//
//        $keywordFilterQuery = (new FilterQuery($this->configuration, $keywordFilterCollection))->getQuery();
//        $rangeFilterQuery = (new FilterQuery($this->configuration, $rangeFilterCollection))->getQuery();
//
//        if (false === $keywordFilterQuery->isEmpty()) {
//            foreach ($keywordFilterQuery->getFilter() as $filter) {
//                $queryKeywordFiltered->getFilter()->add($filter);
//            }
//        }
//
//        if (false === $rangeFilterQuery->isEmpty()) {
//            foreach ($rangeFilterQuery->getFilter() as $filter) {
//                $queryKeywordFiltered->getFilter()->add($filter);
//            }
//        }
//
//        if ($queryKeywordFiltered->isEmpty() === false) {
//            $this->aggregation->setQuery($queryKeywordFiltered);
//        } else {
//            $this->aggregation->setNested((new Nested())->setPath('search_data'));
//        }
                $queryFilterBuilder = new FilterQuery($this->configuration, $this->filterCollection, [$field]);
                $query = $queryFilterBuilder->getQuery();

                if (false === $query->isEmpty()) {
                    $aggregation->setQuery($query);
                } else {
                    $aggregation->setNested((new Nested())->setPath('search_data'));
                }

    public function getFilterAggregation(): ?Aggs
    {
        return $this->aggregation;
                $original->add($aggregation);
            }
        }
    }

    private function getKey(string $type, string $name): string
+29 −19
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ use IQDEV\ElasticSearch\Configuration;
use IQDEV\ElasticSearch\Converter\Request\FilterQuery;
use IQDEV\ElasticSearch\Request\Filter\Collection\FilterCollection;
use IQDEV\ElasticSearch\Search\Aggs\Aggs;
use IQDEV\ElasticSearch\Search\Aggs\AggsCollection;
use IQDEV\ElasticSearch\Search\Aggs\AggsFacetStats;
use IQDEV\ElasticSearch\Search\Aggs\AggsFacetTerms;
use IQDEV\ElasticSearch\Search\BoolQuery\Query;
@@ -23,20 +24,12 @@ class FullAggregation
        private readonly Configuration $configuration,
        private readonly FilterCollection $filterCollection,
    ) {
        $this->queryKeywordFiltered = new Query();
        $this->queryNumberFiltered = new Query();
    }

    public function getKeywordAggregation(): Aggs
    public function updateRequestAggregation(AggsCollection $original): void
    {
        $filterCollection = $this->filterCollection->getKeywordFilters();
        $keywordFilter = (new FilterQuery($this->configuration, $filterCollection))->getQuery();


        if (isset($GLOBALS['DD']) && $GLOBALS['DD'] === true) {
            dump($filterCollection);
            dd($keywordFilter->es());
        }
        $keywordQuery = (new FilterQuery($this->configuration, $this->filterCollection->getKeywordFilters()))->getQuery();
        $numberQuery = (new FilterQuery($this->configuration, $this->filterCollection->getNumberFilters()))->getQuery();

        $aggsKeywordFiltered = new Aggs('keyword_facet_filtered');
        $aggsKeywordFiltered->addAggs(
@@ -46,13 +39,6 @@ class FullAggregation
            )
        );

        return $aggsKeywordFiltered;
    }

    public function getRangeAggregation(): Aggs
    {
        $filterCollection = $this->filterCollection->getNumberFilters();

        $aggsNumberFiltered = new Aggs('number_facet_filtered');
        $aggsNumberFiltered->addAggs(
            AggsFacetStats::create(
@@ -61,6 +47,30 @@ class FullAggregation
            )
        );

        return $aggsNumberFiltered;
        if (false === $keywordQuery->getFilter()->isEmpty()) {
            foreach ($keywordQuery->getFilter() as $item) {
                $numberQuery->getFilter()->add($item);
            }
        }

        if (false === $numberQuery->getFilter()->isEmpty()) {
            foreach ($numberQuery->getFilter() as $item) {
                $keywordQuery->getFilter()->add($item);
            }
        }

        if (false === $keywordQuery->getFilter()->isEmpty()) {
            $aggsKeywordFiltered->setQuery($keywordQuery);
        } else {
            $aggsKeywordFiltered->setNested((new Nested())->setPath('search_data'));
        }

        if (false === $numberQuery->getFilter()->isEmpty()) {
            $aggsNumberFiltered->setQuery($numberQuery);
        } else {
            $aggsNumberFiltered->setNested((new Nested())->setPath('search_data'));
        }

        $original->add($aggsKeywordFiltered)->add($aggsNumberFiltered);
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ class CriteriaRequestBuilder extends RequestBuilder
        $request = clone $this->request;

        $filterQuery = new FilterQuery($this->configuration, $filterCollection);
        $request->setQuery($filterQuery->getQuery());
        $request->getQuery()->modify($filterQuery->getQuery());

        $this->request = $request;
    }
@@ -116,7 +116,7 @@ class CriteriaRequestBuilder extends RequestBuilder
        $request = clone $this->request;

        $filterQuery = new FilterQuery($this->configuration, $filterCollection);
        $request->setPostFilter($filterQuery->getQuery());
        $request->getPostFilter()->modify($filterQuery->getQuery());

        $this->request = $request;
    }
+1 −1
Original line number Diff line number Diff line
@@ -27,5 +27,5 @@ abstract class AbstractFilterQuery
        };
    }

    abstract public function getQuery(FilterGroupCollection $filterGroupCollection): Query|Nested;
    abstract public function getQuery(FilterGroupCollection $filterGroupCollection, array $exclude): Query|Nested;
}
Loading