From bd992dc52a1137688ac6ec7d6c4b861dd4fd4579 Mon Sep 17 00:00:00 2001 From: Aaron Lee Kafton Date: Wed, 17 Apr 2019 13:33:31 -0500 Subject: [PATCH 1/2] Allow BulkIndexer to load relations efficiently when called from a queue --- src/Console/stubs/searchable_model.stub | 7 +++++++ src/Indexers/BulkIndexer.php | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Console/stubs/searchable_model.stub b/src/Console/stubs/searchable_model.stub index 022bc1e..f434188 100644 --- a/src/Console/stubs/searchable_model.stub +++ b/src/Console/stubs/searchable_model.stub @@ -27,4 +27,11 @@ class DummyClass extends Model protected $mapping = [ // ]; + + /** + * @var array + */ + public $searchableRelations = [ + // + ]; } \ No newline at end of file diff --git a/src/Indexers/BulkIndexer.php b/src/Indexers/BulkIndexer.php index a2b92fa..cbda03e 100644 --- a/src/Indexers/BulkIndexer.php +++ b/src/Indexers/BulkIndexer.php @@ -17,6 +17,7 @@ public function update(Collection $models) { $model = $models->first(); $indexConfigurator = $model->getIndexConfigurator(); + $relations = $model->searchableRelations ?? []; $bulkPayload = new TypePayload($model); @@ -28,7 +29,8 @@ public function update(Collection $models) $bulkPayload->set('refresh', $documentRefresh); } - $models->each(function ($model) use ($bulkPayload) { + $models->loadMissing($relations) + ->each(function ($model) use ($bulkPayload) { if ($model::usesSoftDelete() && config('scout.soft_delete', false)) { $model->pushSoftDeleteMetadata(); } From 927771d454a73540104fa1bd9e6a7f036f4302e7 Mon Sep 17 00:00:00 2001 From: Aaron Lee Kafton Date: Wed, 17 Apr 2019 13:47:37 -0500 Subject: [PATCH 2/2] Stylefix --- src/Indexers/BulkIndexer.php | 40 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/Indexers/BulkIndexer.php b/src/Indexers/BulkIndexer.php index cbda03e..c6db381 100644 --- a/src/Indexers/BulkIndexer.php +++ b/src/Indexers/BulkIndexer.php @@ -31,26 +31,26 @@ public function update(Collection $models) $models->loadMissing($relations) ->each(function ($model) use ($bulkPayload) { - if ($model::usesSoftDelete() && config('scout.soft_delete', false)) { - $model->pushSoftDeleteMetadata(); - } - - $modelData = array_merge( - $model->toSearchableArray(), - $model->scoutMetadata() - ); - - if (empty($modelData)) { - return true; - } - - $actionPayload = (new RawPayload()) - ->set('index._id', $model->getKey()); - - $bulkPayload - ->add('body', $actionPayload->get()) - ->add('body', $modelData); - }); + if ($model::usesSoftDelete() && config('scout.soft_delete', false)) { + $model->pushSoftDeleteMetadata(); + } + + $modelData = array_merge( + $model->toSearchableArray(), + $model->scoutMetadata() + ); + + if (empty($modelData)) { + return true; + } + + $actionPayload = (new RawPayload()) + ->set('index._id', $model->getKey()); + + $bulkPayload + ->add('body', $actionPayload->get()) + ->add('body', $modelData); + }); ElasticClient::bulk($bulkPayload->get()); }