Skip to content
Snippets Groups Projects
SearchService.php 1.16 KiB
Newer Older
Pavel's avatar
Pavel committed
<?php

namespace IQDEV\ElasticSearch;

use Elastic\Elasticsearch\Client;
use Elastic\Elasticsearch\Exception\ClientResponseException;
use Elastic\Elasticsearch\Exception\ServerResponseException;
use IQDEV\ElasticSearch\Converter\CriteriaToRequest;
Pavel's avatar
Pavel committed
use IQDEV\ElasticSearch\Converter\EsResponseToResult;

Nikita Chernykh's avatar
Nikita Chernykh committed
class SearchService implements Searchable
Pavel's avatar
Pavel committed
{
    private CriteriaToRequest $criteriaToEsRequest;
Pavel's avatar
Pavel committed
    private EsResponseToResult $esResponseToResult;

    public function __construct(
        private Client $esClient,
        private Configuration $configuration
    ) {
        $this->criteriaToEsRequest = new CriteriaToRequest($this->configuration);
Pavel's avatar
Pavel committed
        $this->esResponseToResult = new EsResponseToResult();
    }

    /**
     * @throws ServerResponseException
     * @throws ClientResponseException
     */
    public function search(Criteria $criteria): Result
    {
        $request = $this->criteriaToEsRequest->fromCriteria($criteria);

        $response = $this->esClient->search([
            'index' => $this->configuration->getIndexName(),
            'body' => $request->es(),
        ]);

        return $this->esResponseToResult->fromResponse($response);
    }
}