elasticsearch_search_api-1.0.x-dev/modules/elasticsearch_search_api_example/src/Search/Suggest/ExampleTitleSuggester.php
modules/elasticsearch_search_api_example/src/Search/Suggest/ExampleTitleSuggester.php
<?php namespace Drupal\elasticsearch_search_api_example\Search\Suggest; use Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\IndexFactory; use Drupal\elasticsearch_search_api\Search\SearchRepository; use Drupal\elasticsearch_search_api\Search\Suggest\SuggesterInterface; use Drupal\search_api\Entity\Index; /** * Custom suggester for web. */ class ExampleTitleSuggester implements SuggesterInterface { /** * The index. * * @var \Drupal\search_api\Entity\Index */ protected $index; /** * The search repository. * * @var \Drupal\elasticsearch_search_api\Search\SearchRepository */ protected $repository; /** * WebTitleSuggester constructor. * * @param \Drupal\search_api\Entity\Index $index * The index. * @param \Drupal\elasticsearch_search_api\Search\SearchRepository $repository * The search repository. */ public function __construct(Index $index, SearchRepository $repository) { $this->index = $index; $this->repository = $repository; } /** * {@inheritdoc} */ public function suggest(string $text) { $index = IndexFactory::getIndexName($this->index); $response = $this->repository->query([ 'index' => $index, 'body' => [ "suggest" => [ "text" => $text, "simple_phrase" => [ "phrase" => [ "field" => "title", "size" => 1, "gram_size" => 1, "direct_generator" => [ [ "field" => "title", "suggest_mode" => "missing", ], ], ], ], ], ], ]); $rawResponse = $response->getRawResponse(); $rawSuggestions = $rawResponse['suggest']['simple_phrase'][0]['options']; return array_map(function ($rawSuggestion) { return $rawSuggestion['text']; }, $rawSuggestions); } }