Elasticsearch
What is and how to use Elasticsearch.
Elasticsearch is developed specifically with search and layered navigation in mind. Because of this Elasticsearch is much more suitable for e-commerce sites navigation and search features. Traditional solutions usually use MySQL, this results in a much bigger impact on the server load and negative performance of the application.
Elasticsearch is controlled using the Hipex CLI docker commands. For the rest of this tutorial we assume you are familiar with the docker basics.
Service configuratie
First we configure the service using a docker-compose.yml
. In this file the elasticsearch version and port is defined.
In these examples version 7.8 and port 19200
is used.
We recommend using a seperate folder for your elasticsearch instance so your configuration file would end up in:
~/elasticsearch/docker-compose.yml
.
version: "3.2"
services:
elasticsearch:
image: elasticsearch:7.8.0
restart: "always"
environment:
discovery.type: "single-node"
ports:
- "19200:9200"
Now the service can be started using docker:compose:up
.
cd ~/elasticsearch/
hipex docker:compose:up --detach
Port bind error
When receiving a Bind for 0.0.0.0:19200 failed: port is already allocated
error, the configured port 19200
is
already in use and another port must be configured.
Usage
Now you should be able to access your elasticsearch instance on port 19200
.
curl localhost:19200
{
"name" : "512decbc664a",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "hZ1_YRATQdOOw1tIz4nn2Q",
"version" : {
"number" : "7.8.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date" : "2020-06-14T19:35:50.234439Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Plugins
When you need plugins like analysis-icu
or analysis-phonetic
for example the suggested way to do this is to create
your own docker image like this:
FROM elasticsearch:6.8.0
RUN elasticsearch-plugin install -b analysis-icu
RUN elasticsearch-plugin install -b analysis-phonetic
If building your own docker image is not an option you can overwrite the default startup command to install them at startup.
version: "3.2"
services:
elasticsearch:
image: elasticsearch:6.5.0
restart: "always"
environment:
discovery.type: "single-node"
command: bash -c "elasticsearch-plugin list | grep analysis-icu || elasticsearch-plugin install -b analysis-icu && elasticsearch-plugin list | grep analysis-phonetic || elasticsearch-plugin install -b analysis-phonetic && docker-entrypoint.sh"
ports:
- "19201:9200"
The elasticsearch-plugin list | grep analysis-icu || elasticsearch-plugin install -b analysis-icu
part will
install the analysis-icu
plugin if not installed. And we end with the default entrypoint docker-entrypoint.sh
.