diff --git a/src/Engines/TypesenseEngine.php b/src/Engines/TypesenseEngine.php index c9436cb..2956fba 100644 --- a/src/Engines/TypesenseEngine.php +++ b/src/Engines/TypesenseEngine.php @@ -162,14 +162,15 @@ public function __construct(Typesense $typesense) */ public function update($models): void { - $collection = $this->typesense->getCollectionIndex($models->first()); - - if ($this->usesSoftDelete($models->first()) && config('scout.soft_delete', false)) { - $models->each->pushSoftDeleteMetadata(); + if (app()->runningInConsole()) { + $this->updateAndImport($models); + } else { + $changes = $models->first()->getDirty(); + $searchableArray = $models->first()->toSearchableArray(); + if (!empty(array_intersect(array_keys($changes), array_keys($searchableArray)))) { + $this->updateAndImport($models); + } } - - $this->typesense->importDocuments($collection, $models->map(fn($m) => $m->toSearchableArray()) - ->toArray()); } /** @@ -344,6 +345,25 @@ private function parseOrderBy(array $orders): string return implode(',', $sortByArr); } + /** + * @param $models + * @return void + * @throws \Http\Client\Exception + * @throws \JsonException + * @throws \Typesense\Exceptions\TypesenseClientError + */ + private function updateAndImport($models): void + { + $collection = $this->typesense->getCollectionIndex($models->first()); + + if ($this->usesSoftDelete($models->first()) && config('scout.soft_delete', false)) { + $models->each->pushSoftDeleteMetadata(); + } + + $this->typesense->importDocuments($collection, $models->map(fn($m) => $m->toSearchableArray()) + ->toArray()); + } + /** * @param \Laravel\Scout\Builder $builder * @param array $options