Loading src/ElasticSearch/Converter/Request/Aggregation/Aggregation.php +4 −16 Original line number Diff line number Diff line Loading @@ -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 Loading src/ElasticSearch/Converter/Request/Aggregation/FilterAggregation.php +28 −43 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading src/ElasticSearch/Converter/Request/Aggregation/FullAggregation.php +29 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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( Loading @@ -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); } } src/ElasticSearch/Converter/Request/CriteriaRequestBuilder.php +2 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; } Loading src/ElasticSearch/Converter/Request/Filter/AbstractFilterQuery.php +1 −1 Original line number Diff line number Diff line Loading @@ -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
src/ElasticSearch/Converter/Request/Aggregation/Aggregation.php +4 −16 Original line number Diff line number Diff line Loading @@ -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 Loading
src/ElasticSearch/Converter/Request/Aggregation/FilterAggregation.php +28 −43 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading
src/ElasticSearch/Converter/Request/Aggregation/FullAggregation.php +29 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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( Loading @@ -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); } }
src/ElasticSearch/Converter/Request/CriteriaRequestBuilder.php +2 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; } Loading
src/ElasticSearch/Converter/Request/Filter/AbstractFilterQuery.php +1 −1 Original line number Diff line number Diff line Loading @@ -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; }