Skip to content
Snippets Groups Projects
SearchService.php 1.27 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);

Nikita Chernykh's avatar
Nikita Chernykh committed
        if (isset($GLOBALS['DD']) && $GLOBALS['DD'] === true) {
            dd(json_encode($request->es()));
        }
Pavel's avatar
Pavel committed
        $response = $this->esClient->search([
            'index' => $this->configuration->getIndexName(),
            'body' => $request->es(),
        ]);

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