Index Configuration
Create algolia_search.yaml
#
A
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# A
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# A
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/