diff --git a/app/Scout/Elasticsearch/Elasticsearch.php b/app/Scout/Elasticsearch/Elasticsearch.php index 844e02e90..ac2a397ae 100644 --- a/app/Scout/Elasticsearch/Elasticsearch.php +++ b/app/Scout/Elasticsearch/Elasticsearch.php @@ -68,7 +68,7 @@ class Elasticsearch extends Search */ protected bool $alive; - public function __construct(ClientBuilderInterface $builder, SearchCriteria $criteria) + public function __construct(ClientBuilderInterface $builder, SearchCriteria $criteria, protected ?Model $model = null) { parent::__construct($criteria); @@ -168,8 +168,15 @@ class Elasticsearch extends Search */ public function search(?Closure $callback = null, int $perPage = 15, int $page = 1, array $sorts = []): LengthAwarePaginator { + throw_unless($this->model instanceof Model, RuntimeException::class, 'Model must be provided for search.'); + + $searchBuilder = static::elasticQuery($this->model::class)->build($this->criteria); + $this->elasticBuilder = $searchBuilder; + // Resolve callback. - $this->elasticBuilder->refineModels($callback); + if ($callback instanceof Closure) { + $this->elasticBuilder->refineModels($callback); + } // Resolve sorting. $sortRaw = []; diff --git a/app/Scout/Search.php b/app/Scout/Search.php index eff03e530..68e0338bb 100644 --- a/app/Scout/Search.php +++ b/app/Scout/Search.php @@ -33,7 +33,7 @@ abstract class Search return match ($driver = Config::get('scout.driver')) { 'collection' => App::make(CollectionSearch::class, ['model' => $model, 'criteria' => $criteria]), - 'elastic' => App::make(Elasticsearch::class, ['criteria' => $criteria]), + 'elastic' => App::make(Elasticsearch::class, ['model' => $model, 'criteria' => $criteria]), 'typesense' => App::make(Typesense::class, ['model' => $model, 'criteria' => $criteria]), default => throw new RuntimeException("Unsupported {$driver} search driver configured."), };