/
Pack Hosting Panel

Elasticsearch

Wat is Elasticsearch en hoe gebruik ik het bij Hipex


Elasticsearch is specifiek ontwikkelt voor vrij zoeken en layered navigation. Hierdoor is Elasticsearch uitermate geschikt voor e-commerce sites als vervanging van de vaak standaard MySQL zoek en filter implementaties.

Elasticsearch wordt bij Hipex gedraaid via Docker. We gaan er voor deze verdere handleiding vanuit dat je bekend bent met Docker en hoe je dit kunt gebruiken. Zie hiervoor ook onze docker documentatie.

Service configuratie

In de docker service configuratie geef je aan welke versie je van Elasticsearch gebruikt en op welke poort deze beschikbaar moet zijn. In dit voorbeeld is dat dus versie 7.8 op poort 19200. Ook zetten wij in dit voorbeeld Elasticsearch dicht door gebruik te maken van de variable ELASTIC_PASSWORD. Standaard username is elastic.

version: "3.2"

services:
    elasticsearch:
        image: elasticsearch:7.8.0
        restart: "always"
        environment:
            - LOG4J_FORMAT_MSG_NO_LOOKUPS=true
            - discovery.type=single-node
            - ES_JAVA_OPTS=-Xmx3g
            - xpack.security.enabled=true
            - xpack.security.audit.enabled=true
            - ELASTIC_PASSWORD=password
        volumes:
        - ./data:/var/elasticsearch
        ports:
        - "19200:9200"

Vervolgens plaats je dit bestand in een subfolder van je home folder, in dit geval bijvoorbeeld ~/elasticsearch/docker-compose.yml

Omdat we gebruik maken van een mounted volume moeten we zorgen dat deze directory eerst is aangemaakt:

cd ~/elasticsearch/
mkdir data
chmod 644 data

Daarna kun je de services starten met dit commando:

cd ~/elasticsearch/
hipex docker:compose:up --detach

Security test Log4j

Om te controleren of de environment variabelen correct is gezet kan je onderstaande test uitvoeren:
Wanneer de waarde true is staat dit correct ingesteld.

[16:29:36]-[Servername]-[Sshuser]-[~/elasticsearch]$ hipex docker:compose:exec elasticsearch bash
[root@5c3facac6acc elasticsearch]# echo $LOG4J_FORMAT_MSG_NO_LOOKUPS
true

Met het commando exit kun je weer uit de docker container gaan.

Memory settings

Standaard allocate ElasticSearch de helft van het beschikbare geheugen op de server. Om dit te voorkomen kun je een extra variabele toevoegen aan de docker configuratie. Als je de variabele - ES_JAVA_OPTS=-Xmx3g gebruikt zal ElasticSearch maxiaal 3GB geheugen allocate. Deze variabele kun je uiteraard naar wens aanpassen.

Poort bind error

Als je bij het opstarten van je service deze foutmelding krijgt: Bind for 0.0.0.0:19200 failed: port is already allocated, dan is de gekozen poort 19200 al in gebruik. In dat geval moet er een andere poort gekozen worden zoals 19201, 19202, etc.

Gebruik

De Elasticsearch instantie is vanaf nu bereikbaar op poort 19200, dit kun je testen met curl.

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"
}

Onderstaand testen we de Elasticsearch instantie met de aangemaakte username en het password:

curl -u elastic:password 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

Als je plugins zoals analysis-icu of analysis-phonetic nodig hebt is het aan te raden om je eigen docker image te builden. Je docker file komt er dan zo uit te zien:

FROM elasticsearch:6.8.0

RUN elasticsearch-plugin install -b analysis-icu
RUN elasticsearch-plugin install -b analysis-phonetic

Als je eigen docker image bouwen geen optie is dan kun je ook het standaard startup commando overschrijven en de plugins installeren tijdens het opstarten. De compose file komt er voor deze twee plugins dan zo uit te zien:

version: "3.2"
services:
    elasticsearch:
        image: elasticsearch:7.8.0
        restart: "always"
        volumes:
        - ./data:/var/elasticsearch
        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"

Het stuk voor het installeren van de analysis-icu plugin ziet er zo uit: elasticsearch-plugin list | grep analysis-icu || elasticsearch-plugin install -b analysis-icu. Het command eindigen we met de standaard entrypoint docker-entrypoint.sh.

Magento 2 ElasticSearch configuratie

Na het actief zetten van de ElasticSearch instantie dient ook de hostname en poort in Magento aangeven te worden. Dit kan door de volgende confgiuratie actief te zetten in de env.php:

    'system' => [
        'default' => [
            'catalog' => [
                'search' => [
                    'engine' => 'elasticsearch7',
                    'elasticsearch7_server_port' => '19200'
                ]
            ]
        ]
    ]
   

Mocht het mogelijk zijn om in te loggen op de back-end kan deze ook gemakkelijk hier aangepast worden door middel van deze configuratie