Skip to content

Commit

Permalink
Fix #10. Optimizing search results incl. using IdSearchResult() instance
Browse files Browse the repository at this point in the history
  • Loading branch information
Torsten Freyda committed Feb 24, 2024
1 parent 76328d5 commit 8cadf48
Showing 1 changed file with 41 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#[Package('buyers-experience')]
class SalesChannelRepositoryDecorator extends SalesChannelRepository
{
protected ?EntitySearchResult $entitySearchResult;
private SalesChannelRepository $originalSalesChannelRepository;
/**
* @internal
Expand Down Expand Up @@ -80,9 +81,10 @@ public function search(Criteria $criteria, SalesChannelContext $salesChannelCont
{
if($this->pluginSettings->isEnabled()) {

$searchResults = $this->pluginSearch($criteria, $salesChannelContext);
if($searchResults->count() >= 1) {
return $searchResults;
if($this->entitySearchResult->getEntities()->count() <= 0) {
$this->entitySearchResult = $this->pluginSearch($criteria, $salesChannelContext);
} else {
return $this->entitySearchResult;
}
}

Expand All @@ -109,7 +111,7 @@ public function pluginSearch(Criteria $criteria, SalesChannelContext $salesChann

return new EntitySearchResult(
$this->definition->getEntityName(),
0,
$productSearchCollection->count(),
$productSearchCollection,
null,
$criteria,
Expand All @@ -127,6 +129,15 @@ public function regularSearch(Criteria $criteria, SalesChannelContext $salesChan
return parent::search($criteria, $salesChannelContext);
}

public function searchIds(Criteria $criteria, SalesChannelContext $salesChannelContext): IdSearchResult
{
$criteria = clone $criteria;

$this->processCriteria($criteria, $salesChannelContext);

return $this->doSearch($criteria, $salesChannelContext);
}

/**
* @return TEntityCollection
*/
Expand All @@ -152,7 +163,32 @@ private function read(Criteria $criteria, SalesChannelContext $salesChannelConte

private function doSearch(Criteria $criteria, SalesChannelContext $salesChannelContext): IdSearchResult
{
$result = $this->searcher->search($this->definition, $criteria, $salesChannelContext->getContext());
if($this->pluginSettings->isEnabled()) {
$this->entitySearchResult = $this->pluginSearch($criteria, $salesChannelContext);
}

if($this->entitySearchResult->getEntities()->count() >= 1) {

$data = array();
foreach ($this->entitySearchResult->getElements() as $elementKey => $elementItems) {
$data[$elementKey] = array(
'primaryKey' => $elementKey,
'data' => array(
'id' => $elementKey
)
);
}

$result = new IdSearchResult(
$this->entitySearchResult->getEntities()->count(),
$data,
$criteria,
$salesChannelContext->getContext()
);

} else {
$result = $this->searcher->search($this->definition, $criteria, $salesChannelContext->getContext());
}

$event = new SalesChannelEntityIdSearchResultLoadedEvent($this->definition, $result, $salesChannelContext);
$this->eventDispatcher->dispatch($event, $event->getName());
Expand Down

0 comments on commit 8cadf48

Please sign in to comment.