scout-extended
scout-extended copied to clipboard
Why algolia search of phrase in laravel app found all words of the phrase?
Working with algolia in Laravel 10 app and using algolia/algoliasearch-client-php 3.4 and algolia/scout-extended 3.0 packages I found that search method works different I expected when I enter several space splitted words : it search for all words found in records.
I tested on algolia side and see that search works in the same way :
Can this issue can be configurable, say in config/scout.php or on algolia side ?
I've found that setting the advancedSyntax
option on your index to true
will make any text that's double quoted be matched exactly as you said.
You can either do this from your index configuration file or the index settings page in the dashboard.
- Since you're using
algolia/scout-extended
package, you can just run the commandphp artisan scout:optimize
to generate separate configuration files inside theconfig
directory for each model that uses theLaravel\Scout\Searchable
trait. Open the corresponding configuration file and look for the keyadvancedSyntax
. By default it's set tofalse
, set it totrue
and run the commandphp artisan scout:sync
, and if you're prompted to sync the settings file to the remote answeryes
. - If you want to do it from the dashboard, open up the index page and switch to the
Configuration
tab, then scroll down to theAdvanced syntax
link and change the switch from the right panel then save the settings.
Then try searching again for "Aut recusandae et"
(notice the double quotes, they're necessary for exact matching), and you should get only results that contains this phrase.
You can also control the advancedSyntax
option per search if you want by passing a custom search parameter, for example:
$tasks = App\Models\Task::search('"Aut recusandae et"')->with([
"advancedSyntax" => true
])->get();