scout-extended icon indicating copy to clipboard operation
scout-extended copied to clipboard

Why algolia search of phrase in laravel app found all words of the phrase?

Open sergeynilov opened this issue 1 year ago • 1 comments

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 :

enter image description here

Can this issue can be configurable, say in config/scout.php or on algolia side ?

sergeynilov avatar Jan 10 '24 20:01 sergeynilov

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 command php artisan scout:optimize to generate separate configuration files inside the config directory for each model that uses the Laravel\Scout\Searchable trait. Open the corresponding configuration file and look for the key advancedSyntax. By default it's set to false, set it to true and run the command php artisan scout:sync, and if you're prompted to sync the settings file to the remote answer yes.
  • If you want to do it from the dashboard, open up the index page and switch to the Configuration tab, then scroll down to the Advanced 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();

Eyad-Bereh avatar Jan 14 '24 12:01 Eyad-Bereh