@@ -139,17 +139,21 @@ protected function performSearch(Builder $builder, array $options = []) {
139
139
);
140
140
}
141
141
142
- $ result = null ;
142
+ $ results = null ;
143
143
144
- $ this ->buildSearchQueryPayloadCollection ($ builder , $ options )->each (function ($ payload ) use (&$ result ) {
145
- $ result = ElasticClient::search ($ payload );
144
+ $ this
145
+ ->buildSearchQueryPayloadCollection ($ builder , $ options )
146
+ ->each (function ($ payload ) use (&$ results ) {
147
+ $ results = ElasticClient::search ($ payload );
146
148
147
- if ($ this ->getTotalCount ($ result ) > 0 ) {
148
- return false ;
149
- }
150
- });
149
+ $ results ['_payload ' ] = $ payload ;
150
+
151
+ if ($ this ->getTotalCount ($ results ) > 0 ) {
152
+ return false ;
153
+ }
154
+ });
151
155
152
- return $ result ;
156
+ return $ results ;
153
157
}
154
158
155
159
public function search (Builder $ builder )
@@ -226,15 +230,15 @@ public function map($results, $model)
226
230
return Collection::make ();
227
231
}
228
232
229
- $ hits = $ results ['hits ' ]['hits ' ];
230
- $ firstHit = reset ($ hits );
231
-
232
233
$ primaryKey = $ model ->getKeyName ();
233
234
234
- $ columns = array_merge (
235
- array_keys ($ firstHit ['_source ' ]),
236
- [$ primaryKey ]
237
- );
235
+ $ columns = array_get ($ results , '_payload.body._source ' );
236
+
237
+ if (is_null ($ columns )) {
238
+ $ columns = ['* ' ];
239
+ } else {
240
+ $ columns [] = $ primaryKey ;
241
+ }
238
242
239
243
$ ids = $ this ->mapIds ($ results );
240
244
@@ -243,13 +247,16 @@ public function map($results, $model)
243
247
->get ($ columns )
244
248
->keyBy ($ primaryKey );
245
249
246
- return Collection::make ($ hits )->map (function ($ hit ) use ($ models ) {
247
- $ id = $ hit ['_id ' ];
250
+ return Collection::make ($ results ['hits ' ]['hits ' ])
251
+ ->map (function ($ hit ) use ($ models ) {
252
+ $ id = $ hit ['_id ' ];
248
253
249
- if (isset ($ models [$ id ])) {
250
- return $ models [$ id ];
251
- }
252
- })->filter ()->values ();
254
+ if (isset ($ models [$ id ])) {
255
+ return $ models [$ id ];
256
+ }
257
+ })
258
+ ->filter ()
259
+ ->values ();
253
260
}
254
261
255
262
public function getTotalCount ($ results )
0 commit comments