業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
プロセスの全体像前処理・特徴量生成Fine Tuning手法まとめ機械学習モデルの選び方モデル評価手法プロトタイピング探索的分析(EDA)
AI

執筆者:Handbook編集部

ElasticSearch導入手順

概要

この記事では、検索エンジンの一つであるElasticSearchの開発者向け導入手順について解説します。 オープンソースであるため、開発初期早めに技術検証を回したい場合に、ローカルで単一ノードを持っているElasticSearch環境を構築する事はお勧めです。

ローカル環境構築

実際ローカル環境構築にElasticSearchを直接インストールという選択肢がありますが、我々エンジニアには基本的にDockerを用いて開発を進めますので、今回の構築はDockerをインストールしていきます。Dockerのインストールについてはこちらを参照してください。

今回は下記のファイル構造により構築を進めていきます

|-- .env
|-- docker-compose.yml
|-- ESDockerfile

.env に必要な変数を定義する

# Password for the 'elastic' user (at least 6 characters)
ELASTIC_PASSWORD=changeme

# Password for the 'kibana_system' user (at least 6 characters)
KIBANA_PASSWORD=changeme

# Version of Elastic products
STACK_VERSION=8.7.1

# Port to expose Elasticsearch HTTP API to the host
ES_PORT=9200

# Port to expose Kibana to the host
KIBANA_PORT=5601

# SAMPLE Predefined Key only to be used in POC environments
ENCRYPTION_KEY=c34d38b3a14956121ff2170e5030b471551370178f43e5626eec58b04a30fae2

ElasticSearchを立ち上がる ESDockerfile を作成します

ARG STACK_VERSION

FROM docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}

RUN elasticsearch-plugin install analysis-kuromoji
RUN elasticsearch-plugin install analysis-icu

上記にいる analysis-kuromojianalysis-icu は日本語の形態素解析やフィルタリングするため、インストールしないといけないプラグインです。


docker-compose.ymlファイルを作成していきます。

services:
  es-setup:
    build:
      context: .
      dockerfile: ESDockerfile
      args:
        - STACK_VERSION=${STACK_VERSION}
    user: '0'
    command: >
     bash -c '
       if [ x${ELASTIC_PASSWORD} == x ]; then
         echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
         exit 1;
       elif [ x${KIBANA_PASSWORD} == x ]; then
         echo "Set the KIBANA_PASSWORD environment variable in the .env file";
         exit 1;
       fi;

       echo "Waiting for Elasticsearch availability";
       until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done;

       echo "Setting kibana_system password";
       until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;

       echo "All done!";
     '
    environment:
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - KIBANA_PASSWORD=${KIBANA_PASSWORD}

  es01:
    depends_on:
      - es-setup
    build:
      context: .
      dockerfile: ESDockerfile
      args:
        - STACK_VERSION=${STACK_VERSION}
    labels:
      co.elastic.logs/module: elasticsearch
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    environment:
      - node.name=es01
      - cluster.name=docker-cluster
      - discovery.type=single-node
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - bootstrap.memory_lock=true
      - xpack.security.enabled=true
      - xpack.license.self_generated.type=basic
    mem_limit: 1073741824
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test:
        [
          'CMD-SHELL',
          "curl -s --cacert config/certs/ca/ca.crt http://localhost:9200 | grep -q 'missing authentication credentials'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

  kibana:
    depends_on:
      es01:
        condition: service_healthy
    image: docker.elastic.co/kibana/kibana:${STACK_VERSION}
    labels:
      co.elastic.logs/module: kibana
    volumes:
      - kibanadata:/usr/share/kibana/data
    ports:
      - 5601:5601
    environment:
      - SERVERNAME=kibana
      - ELASTICSEARCH_HOSTS=http://es01:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
      - XPACK_SECURITY_ENCRYPTIONKEY=${KIBANA_ENCRYPTION_KEY}
      - XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=${KIBANA_ENCRYPTION_KEY}
      - XPACK_REPORTING_ENCRYPTIONKEY=${KIBANA_ENCRYPTION_KEY}
    mem_limit: 1073741824
    healthcheck:
      test:
        [
          'CMD-SHELL',
          "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

volumes:
  esdata01:
    driver: local
  kibanadata:
    driver: local

上記に載せているサービス毎に説明していくと

  • es-setup :ElasticSearchとKibanaを立ち上がる前に、各サービスにおいてパースワードが設定されたかどうかと、正常に起動している事をチェックする。
  • es01es-setup が無事に起動された事に依存する。分散型であるElasticSearchですが、ローカルに複数計算ノードが必要ないため、今回単一ノードを持っているElasticSearchホスティングサービスを起動する。
  • kibanaes01 のhealthcheckが正常に動いてるかどうかに依存する。Kibanaは、オープンソースのデータ可視化ツールであり、ElasticSearchと組み合わせて使用されることが一般的です。ElasticSearchに格納されたデータを検索、表示、分析するためのユーザーインターフェースを提供します。

Docker composeで環境構築を行う

docker-compose build
docker-compose up -d

クラウド環境利用

GCPとAWSに経由して利用したい場合は、各マーケットプレイスにサブスクリプションで提供されていますので、そちらにチェックしてください。

本体を直接利用したい場合は、下記の手順を踏まえて進めてください。

ElasticSearch のホームページへ移動します。

HPの右上にログイン、もしくは無料トライアルボタンを押すとログインページが表示されます。

Googleアカウントで登録もしくはElasticSearchの新規アカウントを作って、登録してください。

ここからはこちらの記事に参照し、デプロイを進めてください

参照

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年06月13日に最終更新
読み込み中...