diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php index 8cd30c1499..13b310e8af 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php @@ -21,7 +21,6 @@ use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure; use Alchemy\Phrasea\SearchEngine\SearchEngineInterface; use Alchemy\Phrasea\SearchEngine\SearchEngineOptions; use Alchemy\Phrasea\SearchEngine\SearchEngineResult; -use Alchemy\Phrasea\SearchEngine\SearchEngineSuggestion; use Alchemy\Phrasea\Exception\RuntimeException; use Closure; use Doctrine\Common\Collections\ArrayCollection; @@ -284,7 +283,6 @@ class ElasticSearchEngine implements SearchEngineInterface $res = $this->client->search($params); $results = new ArrayCollection(); - $suggestions = new ArrayCollection(); $n = 0; foreach ($res['hits']['hits'] as $hit) { @@ -294,21 +292,25 @@ class ElasticSearchEngine implements SearchEngineInterface /** @var FacetsResponse $facets */ $facets = $this->facetsResponseFactory->__invoke($res); - // for es, suggestions are a flat view of facets (api backward compatibility) - $suggestions->clear(); - foreach($facets->getFacets() as $facet) { - foreach($facet['values'] as $value) { - $suggestions->add(new SearchEngineSuggestion($value['query'], $value['value'], $value['count'])); - } - } $query['ast'] = $this->app['query_compiler']->parse($string)->dump(); $query['query_main'] = $recordQuery; $query['query'] = $params['body']; $query['query_string'] = json_encode($params['body']); - return new SearchEngineResult($results, json_encode($query), $res['took'], $offset, - $res['hits']['total'], $res['hits']['total'], null, null, $suggestions, [], - $this->indexName, $facets); + return new SearchEngineResult( + $results, // ArrayCollection of results + json_encode($query), + $res['took'], // duration + $offset, // offset start + $res['hits']['total'], // available + $res['hits']['total'], // total + null, // error + null, // warning + $facets->getAsSuggestions(), // ArrayCollection of suggestions + [], // propositions + $this->indexName, + $facets + ); } /** diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php index 7a81cf3a7d..2b1c3450bf 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php @@ -3,6 +3,8 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\Search; use Alchemy\Phrasea\Exception\RuntimeException; +use Alchemy\Phrasea\SearchEngine\SearchEngineSuggestion; +use Doctrine\Common\Collections\ArrayCollection; use JsonSerializable; class FacetsResponse implements JsonSerializable @@ -32,13 +34,20 @@ class FacetsResponse implements JsonSerializable } /** - * Term aggregates - * - * @return array + * @return ArrayCollection */ - public function getFacets() + public function getAsSuggestions() { - return $this->facets; + $suggestions = new ArrayCollection(); + + // for es, suggestions are a flat view of facets (api backward compatibility) + foreach ($this->facets as $facet) { + foreach ($facet['values'] as $value) { + $suggestions->add(new SearchEngineSuggestion($value['query'], $value['value'], $value['count'])); + } + } + + return $suggestions; } private function buildBucketsValues($name, $buckets)