Loading src/ElasticSearch/Config/BaseConfiguration.php +1 −1 Original line number Diff line number Diff line <?php namespace Docke\ElasticSearch\Config; namespace IQDEV\ElasticSearch\Config; use IQDEV\ElasticSearch\Configuration; Loading src/ElasticSearch/Domain/SearchResultFactory.php +32 −0 Original line number Diff line number Diff line Loading @@ -40,8 +40,40 @@ 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; Loading src/ElasticSearch/Domain/SearchService.php +56 −31 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ 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, Loading Loading @@ -44,8 +45,6 @@ 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) { Loading @@ -56,21 +55,8 @@ 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); Loading Loading @@ -103,18 +89,6 @@ 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') Loading @@ -131,6 +105,37 @@ final class SearchService implements DomainSearchService $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'); Loading @@ -148,4 +153,24 @@ 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; } } src/ElasticSearch/Search/Aggs/AggsKeyWordFacet.php +7 −1 Original line number Diff line number Diff line Loading @@ -14,8 +14,14 @@ 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")) (new Terms("{$path}.{$facet}.facet_code", $aOptions)) ->setSize(250) ); Loading src/ElasticSearch/Search/Aggs/Terms.php +2 −1 Original line number Diff line number Diff line Loading @@ -13,9 +13,10 @@ final class Terms implements Esable /** * @param string $field */ public function __construct(string $field) public function __construct(string $field, array $options = []) { $this->field = $field; $this->options = $options; } public function setSize(int $size): self Loading Loading
src/ElasticSearch/Config/BaseConfiguration.php +1 −1 Original line number Diff line number Diff line <?php namespace Docke\ElasticSearch\Config; namespace IQDEV\ElasticSearch\Config; use IQDEV\ElasticSearch\Configuration; Loading
src/ElasticSearch/Domain/SearchResultFactory.php +32 −0 Original line number Diff line number Diff line Loading @@ -40,8 +40,40 @@ 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; Loading
src/ElasticSearch/Domain/SearchService.php +56 −31 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ 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, Loading Loading @@ -44,8 +45,6 @@ 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) { Loading @@ -56,21 +55,8 @@ 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); Loading Loading @@ -103,18 +89,6 @@ 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') Loading @@ -131,6 +105,37 @@ final class SearchService implements DomainSearchService $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'); Loading @@ -148,4 +153,24 @@ 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; } }
src/ElasticSearch/Search/Aggs/AggsKeyWordFacet.php +7 −1 Original line number Diff line number Diff line Loading @@ -14,8 +14,14 @@ 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")) (new Terms("{$path}.{$facet}.facet_code", $aOptions)) ->setSize(250) ); Loading
src/ElasticSearch/Search/Aggs/Terms.php +2 −1 Original line number Diff line number Diff line Loading @@ -13,9 +13,10 @@ final class Terms implements Esable /** * @param string $field */ public function __construct(string $field) public function __construct(string $field, array $options = []) { $this->field = $field; $this->options = $options; } public function setSize(int $size): self Loading