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