fork / craft-elastica
A plugin to connect to Elasticsearch and persist elements via hooks
Installs: 1 099
Dependents: 0
Suggesters: 0
Security: 0
Stars: 9
Watchers: 8
Forks: 0
Type:craft-plugin
Requires
- php: ^8.2
- craftcms/cms: ^5.0.0
- elasticsearch/elasticsearch: ^8.0
Requires (Dev)
- craftcms/phpstan: dev-main
- friendsofphp/php-cs-fixer: ^3.64
- phpstan/phpstan: ^1.12
This package is auto-updated.
Last update: 2025-03-29 00:50:44 UTC
README

Elastica Plugin for Craft 5.x
Table of contents
Features
- Index entries and other elements in Elasticsearch
- Customize Index data structures via hooks
- Define Index Templates to configure the Index and its fields and mapping in Elasticsearch
- Re-Index contents via utility or console command
Requirements
- Craft CMS >= 5.x
Version Matrix
Elastica Version | Craft Version | ElasticSearch Version |
---|---|---|
4.x | 5.x | 8.x |
3.x | 5.x | 7.x |
2.x | 4.x | 7.x |
Setup
1. Install
Install the package
cd /path/to/project
composer require fork/craft-elastica
2. Configuration
Go to the plugin settings page and enter a index prefix name which is prepended to the indexes being created in Elasticsearch. The name of the index is generated from this prefix. Also provide the hostname of the elasticsearch instance.
Usage
To generate the data to index register event handlers in your own module or plugin class like this:
// initialize elasticsearch indexer Event::on( Indexer::class, Indexer::EVENT_INDEXER_INIT, function (IndexerInitEvent $event) { $event->addSectionHandles([ 'articles', ]); $event->addCategoryGroupHandles([ 'topics', ]); $event->addVolumeHandles([ 'images', ]); } ); // build elasticsearch index data Event::on( Indexer::class, Indexer::EVENT_BEFORE_INDEX_DATA, function (IndexEvent $event) { // build your custom data structure to index $indexData = MyCustomPlugin::$plugin->mySearchService->getIndexData($event->sender); $event->indexData = $indexData; } );
Environment based configuration
You can make the plugin's configuration environment based by adding an elastica.php file in your config directory with the following contents. This is just an example, you can name your environment variables as you want.
use craft\helpers\App; return [ 'indexingEnabled' => App::env('ELASTICSEARCH_INDEXING_ENABLED') ?? true, 'hosts' => [ [ App::env('CRAFT_ENVIRONMENT'), App::env('ELASTICSEARCH_URL'), App::env('ELASTICSEARCH_INDEX_PREFIX'), ] ] ];
Roadmap
- Logo
- Index categories
- Maybe include search proxy
- Exclude sites via settings
- Show index info / test index in utility
- More documentation

Brought to you by Fork Unstable Media GmbH