Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/raistlfiren/elastic

Elastic search extension for Bolt
https://github.com/raistlfiren/elastic

bolt-cms elasticsearch search

Last synced: 10 days ago
JSON representation

Elastic search extension for Bolt

Awesome Lists containing this project

README

        

Bolt CMS Elasticsearch Extension
======================
A simple extension that integrates with the official `elasticsearch` package. Documentation for the plugin can be found
under https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html . Please note that you will need to
manually install `elasticsearch` into your root Bolt directory. Currently, it only does the following
things:

- Connects to an Elasticsearch instance and creates the index, index settings, and mappings
- Imports existing data into the Elasticsearch instance
- Listens to create, update, and delete events to content types and updates the Elasticsearch instance appropriately

It does NOT
- Integrate search functionality in Bolt
- Include any twig functions to use in your Bolt CMS to help search through Elasticsearch
- Adjust once the content types are changed

## Installation
Installation is relatively simple, but since it needs the `elasticsearch-php` package, it will need to be installed separately.
This can be done by logging into your server through SSH and installing the library through command line.

`cd `

**NOTE** - Be sure to install the correct version of the library for your Elasticsearch version. A list of appropriate versions
can be found here - https://github.com/elastic/elasticsearch-php#version-matrix
You will need to replace `"~6.0"` with the correct version of the library, whether it be `"~5.0"`, `"~2.0"`, or etc...

`composer require elasticsearch/elasticsearch "~6.0"`

After that is done, then install this extension through the Bolt GUI.

Finally, setup the index, mappings, and import the content into Elasticsearch. A new page will be added to the backend in
the menu called `ES Status`. It will allow you to create the index and import data.

*If you modify the contenttypes.yml file after you create the index and import data, then you will need re-index your
data and re-create the index to include the new content types or fields.*

## Configuration
A new configuration file will be created in `app/config/extensions/elastic.kemper.yml` once it is installed
that allows you to customize most things.

## Making Content Types Searchable
You can make a content type searchable by setting `searchable: true` in the `app/config/contenttypes.yml` file. They will
not be included in the index, if that value is not included with the content type.

### Hosts
You can define one or many hosts for your elasticsearch instance under hosts. More information can be found here -
https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_configuration.html

### Index Name
The index name is the name of the index, enough said.

### Version
Please specify the correct Elasticsearch version you are running for your cluster.

### Index Settings
The index settings will include any settings that you might want to include for the index. You can find more information
on configuring this through the Elasticsearch documentation - https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_settings.html

### Index Mappings
The index mappings can be defined for individual fields if needed. Currently, all fields are indexed per content type.
This allows you to add mapping information for fields other than what Elasticsearch gives each field by default. Datetime
fields are automatically defaulted to datetime `YYYY-MM-dd HH:mm:ss`. The other fields are guessed by Elasticsearch.

### Usage
After everything is installed, it should be working properly in the background. Every time a content type is created, updated,
and deleted it will log it in the system log.

##TODO
- [ ] - Integrate search functionality into Bolt (**Maybe this should be in another extension to prevent a monolithic extension**)
- [ ] - Create a search route to replace the existing search route that uses Elasticsearch
- [ ] - Create a TWIG function similar to `search` that integrates into Elasticsearch
- [ ] - Once the contenttypes.yml changes update Elasticsearch appropriately
- [ ] - Add tests