From fa37f21a23acdad5fa9d66995989b16c51927d26 Mon Sep 17 00:00:00 2001 From: Pavel Piligrimov Date: Sun, 18 Dec 2022 23:12:57 +0500 Subject: [PATCH] =?UTF-8?q?Revert=20"WIP=20|=20=D0=BB=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=BB=D0=BD=D0=BE=D0=B9=20=D1=84?= =?UTF-8?q?=D0=B0=D1=81=D0=B5=D1=82=D0=BD=D0=BE=D0=B9=20=D1=84=D0=B8=D0=BB?= =?UTF-8?q?=D1=8C=D1=82=D1=80=D0=B0=D1=86=D0=B8=D0=B8"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 512cbe712c16d92e4bafad2f42c5d5c8c5b9ea38. --- .../Domain/SearchResultFactory.php | 32 ------- src/ElasticSearch/Domain/SearchService.php | 87 +++++++------------ .../Search/Aggs/AggsKeyWordFacet.php | 8 +- src/ElasticSearch/Search/Aggs/Terms.php | 3 +- 4 files changed, 33 insertions(+), 97 deletions(-) diff --git a/src/ElasticSearch/Domain/SearchResultFactory.php b/src/ElasticSearch/Domain/SearchResultFactory.php index 68d7f8a..a9a132a 100644 --- a/src/ElasticSearch/Domain/SearchResultFactory.php +++ b/src/ElasticSearch/Domain/SearchResultFactory.php @@ -40,40 +40,8 @@ final class SearchResultFactory if (isset($data['aggregations']['keyword_facet']['agg_keyword_facet_code']['buckets'])) { $buckets = $data['aggregations']['keyword_facet']['agg_keyword_facet_code']['buckets']; $bucketsFiltered = []; - - $aKeys = array_keys($data['aggregations']); - foreach ($aKeys as $sKey) { - if (strpos($sKey, 'keyword_facet_filtered_') !== false) { - $sCode = substr($sKey, strlen('keyword_facet_filtered_')); - if (isset($data['aggregations'][$sKey]['all_keyword_facet_filtered_' . $sCode]['agg_keyword_facet_code']['buckets'])) { - foreach ($data['aggregations'][$sKey]['all_keyword_facet_filtered_' . $sCode]['agg_keyword_facet_code']['buckets'] as $bucket) { - $bucketsFiltered[$bucket['key']] = []; - foreach ($bucket['agg_keyword_facet_value']['buckets'] as $values) { - $bucketsFiltered[$bucket['key']][$values['key']] = $values; - } - } - } - } - - if (strpos($sKey, 'all_keyword_facet_filtered_') !== false) { - $sCode = substr($sKey, strlen('all_keyword_facet_filtered_')); - if (isset($data['aggregations']['all_keyword_facet_filtered_' . $sCode]['agg_keyword_facet_code']['buckets'])) { - foreach ($data['aggregations']['all_keyword_facet_filtered_' . $sCode]['agg_keyword_facet_code']['buckets'] as $bucket) { - $bucketsFiltered[$bucket['key']] = []; - foreach ($bucket['agg_keyword_facet_value']['buckets'] as $values) { - $bucketsFiltered[$bucket['key']][$values['key']] = $values; - } - } - } - } - } - if (isset($data['aggregations']['keyword_facet_filtered']['all_keyword_facet_filtered']['agg_keyword_facet_code']['buckets'])) { foreach ($data['aggregations']['keyword_facet_filtered']['all_keyword_facet_filtered']['agg_keyword_facet_code']['buckets'] as $bucket) { - if (isset($bucketsFiltered[$bucket['key']])) { - continue; - } - $bucketsFiltered[$bucket['key']] = []; foreach ($bucket['agg_keyword_facet_value']['buckets'] as $values) { $bucketsFiltered[$bucket['key']][$values['key']] = $values; diff --git a/src/ElasticSearch/Domain/SearchService.php b/src/ElasticSearch/Domain/SearchService.php index d55f20e..277c171 100644 --- a/src/ElasticSearch/Domain/SearchService.php +++ b/src/ElasticSearch/Domain/SearchService.php @@ -14,7 +14,6 @@ use IQDEV\ElasticSearch\Search\Pagination; use IQDEV\ElasticSearch\Search\Request; use Elastic\Elasticsearch\Client; use IQDEV\Search\{Filter\Filter, - Filter\FilterCollection, Filter\FilterKeyword, Filter\FilterCategory, Filter\FilterNumber, @@ -45,6 +44,8 @@ final class SearchService implements DomainSearchService { $request = new Request(); $commonQuery = new Query(); + $filterKeyword = new Query(); + $filterNumber = new Query(); if ($q->filters) { foreach ($q->filters as $filter) { @@ -55,8 +56,21 @@ final class SearchService implements DomainSearchService ); continue; } + + if ($filter instanceof FilterNumber) { + $oFacet = new FilterNumberFacet($filter->key, $filter->min, $filter->max); + $filterNumber->filter($oFacet); + $commonQuery->filter($oFacet); + continue; + } + + if ($filter instanceof FilterKeyword) { + $oFacet = new FilterKeywordFacet($filter->key, $filter->value); + $filterKeyword->filter($oFacet); + $commonQuery->filter($oFacet); + continue; + } } - $commonQuery = $this->getQuery($q->filters); } $commonFilter = clone $commonQuery; $commonFilter->setType(Query::TYPE_FILTER); @@ -66,7 +80,7 @@ final class SearchService implements DomainSearchService new Pagination($q->pagination->limit, $q->pagination->page) ); } - + if ($q->sorting && !$q->sorting->isEmpty()) { $oSortingCollection = new SortingCollection(); foreach ($q->sorting as $sorting) { @@ -89,53 +103,34 @@ final class SearchService implements DomainSearchService $request->addMatch('full_search_content', ['query' => $q->query]); } + if ($filterKeyword->isEmpty() === false) { + $nestedFilterKeyword = new Nested(); + $nestedFilterKeyword->setPath('search_data') + ->setQuery($filterKeyword); + } + + if ($filterNumber->isEmpty() === false) { + $nestedFilterNumber = new Nested(); + $nestedFilterNumber->setPath('search_data') + ->setQuery($filterNumber); + } + if ($commonQuery->isEmpty() === false) { $nestedFilter = new Nested(); $nestedFilter->setPath('search_data') ->setQuery($commonQuery); - + $request->getPostFilter()->filter($nestedFilter); $aggsKeywordFiltered = new Aggs('keyword_facet_filtered'); $aggsKeywordFiltered->addAggs(AggsKeyWordFacet::create('all_keyword_facet_filtered', 'keyword_facet')) ->setQuery($commonFilter); $request->getAggs()->add($aggsKeywordFiltered); - + $aggsNumberFiltered = new Aggs('number_facet_filtered'); $aggsNumberFiltered->addAggs(AggsNumberFacet::create('all_number_facet_filtered', 'number_facet')) ->setQuery($commonFilter); $request->getAggs()->add($aggsNumberFiltered); - - foreach ($q->filters as $filter) { - if ($filter instanceof FilterKeyword) { - $oFilters = new FilterCollection(); - foreach ($q->filters as $filter2) { - if (!($filter2 instanceof Filter) || $filter2 instanceof FilterCategory) { - continue; - } - - if ($filter->key() === $filter2->key()) { - continue; - } - $oFilters->add($filter2); - } - if ($oFilters->isEmpty()) { - $aggsKeywordFiltered = AggsKeyWordFacet::create('all_keyword_facet_filtered_' . $filter->key( - ), - 'keyword_facet' - ); - } else { - $aggsKeywordFiltered = new Aggs('keyword_facet_filtered_' . $filter->key()); - $aggsKeywordFiltered->addAggs(AggsKeyWordFacet::create('all_keyword_facet_filtered_' . $filter->key( - ), - 'keyword_facet' - ) - ); - $aggsKeywordFiltered->setQuery($this->getQuery($oFilters)); - } - $request->getAggs()->add($aggsKeywordFiltered); - } - } } $aggsKeyword = AggsKeyWordFacet::create('keyword_facet', 'keyword_facet'); @@ -153,24 +148,4 @@ final class SearchService implements DomainSearchService return SearchResultFactory::createFromResponse($response, $request); } - - private function getQuery(FilterCollection $filters): Query - { - $commonQuery = new Query(); - foreach ($filters as $filter) { - if ($filter instanceof FilterNumber) { - $oFacet = new FilterNumberFacet($filter->key, $filter->min, $filter->max); - $commonQuery->filter($oFacet); - continue; - } - - if ($filter instanceof FilterKeyword) { - $oFacet = new FilterKeywordFacet($filter->key, $filter->value); - $commonQuery->filter($oFacet); - continue; - } - } - - return $commonQuery; - } } diff --git a/src/ElasticSearch/Search/Aggs/AggsKeyWordFacet.php b/src/ElasticSearch/Search/Aggs/AggsKeyWordFacet.php index 7b0c308..482fa16 100644 --- a/src/ElasticSearch/Search/Aggs/AggsKeyWordFacet.php +++ b/src/ElasticSearch/Search/Aggs/AggsKeyWordFacet.php @@ -14,14 +14,8 @@ final class AggsKeyWordFacet $aggKeywordFacet->setNested($nested); $aggKeywordFacetCode = new Aggs("agg_{$facet}_code"); - - $aOptions = []; - if (stripos($code, 'all_keyword_facet_filtered_') !== false) { - $aOptions = ['include' => substr($code, strlen('all_keyword_facet_filtered_'))]; - } - $aggKeywordFacetCode->setTerms( - (new Terms("{$path}.{$facet}.facet_code", $aOptions)) + (new Terms("{$path}.{$facet}.facet_code")) ->setSize(250) ); diff --git a/src/ElasticSearch/Search/Aggs/Terms.php b/src/ElasticSearch/Search/Aggs/Terms.php index 513eaa1..582d069 100644 --- a/src/ElasticSearch/Search/Aggs/Terms.php +++ b/src/ElasticSearch/Search/Aggs/Terms.php @@ -13,10 +13,9 @@ final class Terms implements Esable /** * @param string $field */ - public function __construct(string $field, array $options = []) + public function __construct(string $field) { $this->field = $field; - $this->options = $options; } public function setSize(int $size): self -- GitLab