Index configuration
Create algolia_search.yaml
Configuration typically lives in the config/packages/algolia_search.yaml
file for a Symfony 4 application.
This is how you define what entity you want to index and some other technical details like a prefix or the number of results.
The documentation uses the Symfony/demo app as an example; we are working with posts and comments.
The simplest version
1
2
3
4
5
6
7
algolia_search:
indices:
- name: posts
class: App\Entity\Post
- name: comments
class: App\Entity\Comment
A more complete example
1
2
3
4
5
6
7
8
9
10
11
algolia_search:
nbResults: 8 # Retrieve less results on search (default: 20)
prefix: %env(SEARCH_PREFIX)% # Use a prefix for index names based en env var
doctrineSubscribedEvents: [] # disable doctrine events (turn off realtime sync)
indices:
- name: posts
class: App\Entity\Post
enable_serializer_groups: true
- name: comments
class: App\Entity\Comment
Multi-environment setup
Usually, you need different configurations per environment, so that you don’t work with production data while developing.
Prefix
The first thing to do is to set a prefix per environment. You can do this by either creating an extra configuration file for your development environment, or rely on environment variables.
Configuration file
Create a config file inside the dev/
directory and override your default configuration.
1
2
3
# config/packages/algolia_search.yaml
algolia_search:
prefix: app_prod_
1
2
3
# config/packages/dev/algolia_search.yaml
algolia_search:
prefix: app_dev_
Environment variables
In your config file, set the prefix as environment variable.
1
2
algolia_search:
prefix: %env(SEARCH_PREFIX)%
Then, define the SEARCH_PREFIX
variable in your .env
file or your Apache/Nginx configuration.
Symfony makes it easy to concatenate environment variables in the .env
file.
The following example uses the APP_ENV
environment variable to create a search prefix:
1
SEARCH_PREFIX=app1_${APP_ENV}_
Bypass calls to Algolia
While developing your application, you might want to prevent calls to Algolia being made. You can do this in the following ways:
- You can unsubscribe from Doctrine events to avoid indexing calls when you update your data.
- You can extend the
SearchServiceInterface
and use that new class, in your tests for example. You have theNullSearchService
class at your disposal if you want a starting point. You will have to override the service in your configuration.
1
2
3
4
5
6
7
8
9
10
11
12
namespace App\Tests\Service;
use Algolia\SearchBundle\SearchService;
/**
* Class NullSearchService.
*/
final class NullSearchService implements SearchServiceInterface
{
//...
}
1
2
3
4
# config/packages/test/algolia_search.yaml
search.service:
class: Algolia\SearchBundle\Services\NullSearchService
Index settings
You can use JSON files, located at config/settings/algolia_search/{$index_name}-settings.json
, to handle index settings.
The provided SettingsManager
class backs up settings from the engine and pushes them back with the following commands:
1
2
php bin/console search:settings:backup --indices=posts,comments
php bin/console search:settings:push --indices=posts,comments
The --indices
option takes a comma-separated list of index names (without prefix, as defined in configuration). If no options are passed all indices will be processed.
Settings directory
Depending on your version of Symfony, the settings will be saved in different locations:
- Symfony 4:
config/settings/algolia_search/
- Symfony 3:
app/Resources/SearchBundle/settings/
The settings directory can also be set in the configuration if you have a non-standard setup or if you wish to save them elsewhere. The project directory will automatically be prepended.
1
2
algolia_search:
settingsDirectory: app/search-settings/