laravel-scout-typesense-driver icon indicating copy to clipboard operation
laravel-scout-typesense-driver copied to clipboard

Using Multi Search after merging to Laravel Scout

Open GeorgThomassen opened this issue 1 year ago • 2 comments
trafficstars

No idea if this is the right place to ask, but;

This driver has been merged upstream to the Laravel Scout repository, however it seems the Laravel team has no intention of implementing multi search for any of the drivers, including Typesense. How would you recommend one to do federated/multi search? Use the driver from this repository or?

Thanks in advance

GeorgThomassen avatar Feb 27 '24 21:02 GeorgThomassen

Also interested to know if there's any clean workaround.

samuelhautcoeur avatar Apr 04 '24 21:04 samuelhautcoeur

Also have this requirement so have been digging into the libraries a bit to see if there's a lower level undocumented workaround without falling back to this driver.

If we look at the Laravel Scout core typesense engine we can see that it proxies methods dynamically onto the underlying client: https://github.com/laravel/scout/blob/8af517e61e88c423b9e9b466713e5f3a56e588ac/src/Engines/TypesenseEngine.php#L534

This means we can get hold of the client multisearch by doing this: $multiSearch = app(Laravel\Scout\EngineManager::class)->engine('typesense')->getMultiSearch();

We can then call perform on this and pass in our query similarly to https://github.com/typesense/laravel-scout-typesense-driver?tab=readme-ov-file#multi-search - syntax slightly different e.g. $multiSearch->perform(['searches' => $searchRequests, $options]);

See https://github.com/typesense/typesense-php/blob/4e41737b4ee416e6b2041f81f5506bdac7c823b2/src/MultiSearch.php#L39 for the signature and how it's implemented in the client.

Bear in mind as this is lower level you won't get a lot of the magic, e.g. youll be getting a simple array back rather than a builder instance, so you won't have paginateRaw without implementing it yourself, if you're using SCOUT_PREFIX you would need to add that to your collection names manually, etc

(Edits for clarity)

moussaclarke avatar Apr 13 '24 08:04 moussaclarke