Skip to content
Snippets Groups Projects
SearchService.php 1.26 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\CriteriaToEsRequest;
use IQDEV\ElasticSearch\Converter\EsResponseToResult;

Nikita Chernykh's avatar
Nikita Chernykh committed
class SearchService implements Searchable
Pavel's avatar
Pavel committed
{
    private Client $esClient;
    private Configuration $configuration;
    private CriteriaToEsRequest $criteriaToEsRequest;
    private EsResponseToResult $esResponseToResult;

    public function __construct(Client $esClient, Configuration $configuration)
    {
        $this->esClient = $esClient;
        $this->configuration = $configuration;

        $this->criteriaToEsRequest = new CriteriaToEsRequest();
        $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);
    }
}