Skip to content
Snippets Groups Projects
SearchService.php 1.23 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;
Nikita Chernykh's avatar
Nikita Chernykh committed
use IQDEV\ElasticSearch\Converter\Request\CriteriaToRequest;
use IQDEV\ElasticSearch\Converter\Result\EsResponseToResult;
use IQDEV\ElasticSearch\Criteria\Criteria;
Pavel's avatar
Pavel committed

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

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

    /**
     * @throws ServerResponseException
     * @throws ClientResponseException
     */
    public function search(Criteria $criteria): Result
    {
Nikita Chernykh's avatar
Nikita Chernykh committed
        $request = $this->criteriaToRequest->fromCriteria($criteria);
Pavel's avatar
Pavel committed

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

        return $this->esResponseToResult->fromResponse($response, $this->configuration);
Pavel's avatar
Pavel committed
    }
}