LoginSignup
0
1

More than 3 years have passed since last update.

Elasticsearchはじめる

Posted at

elasticsearchについて

概要

elasticsearchとは、[1]

  • Elastic社が開発している、スケーラビリティに優れた全文検索エンジン
  • リアルタイムデータ分析、ログ解析、全文検索など様々な分析が可能になる
  • ログ集約のLogstashやfluentd、可視化ツールのkibanaと一緒に使われることが多い。また、日本語用に日本語形態素解析エンジンの kuromojiを導入して使われる。
  • 複数のデータベースを横断して検索することが、ごく当たり前の用途として提供されている

動作環境

  • elasticsearch: 6.7.1
  • kinaba: 6.7.1

始め方

導入の仕方は2種類。

1. homebrewからインストール

  1. brew install elasticsearch
    次にpluginを入れる。使いたいanalyzerに応じて異なるが、日本語の場合kuromojiを使うことが多い。
  2. /bin/elasticsearch-plugin install analysis-kuromoji

2. dockerを使う(推奨)[2]

elasticsearchは通常、kibana というアプリケーションを用いて分析やデータの可視化をするためdocker-composeで同時にインストールしたほうが楽。また、ホストの環境に影響しにくいのもポイント。

ファイル構造

|--- docker-compose.yml
|--- es
|    |--- Dockerfile
|
|---kibana
     |--- Dockerfile

docker-compose.yml

version: '2'
services:
  elasticsearch:
    build: es
    volumes:
        - es-data:/usr/share/elasticsearch/data
    ports:
        - 9200:9200
    expose:
        - 9300
    ulimits:
        nofile:
            soft: 65536
            hard: 65536
        # https://github.com/docker-library/elasticsearch/issues/111
        # uliimit: リソースの制限を拡大させている。
  kibana:
    build: kibana
    links:
        - elasticsearch:elasticsearch
    ports:
        - 5601:5601

volumes:
    es-data:
        driver: local

es/Dockerfile

FROM elasticsearch:6.7.1

# kuromojiをインストール
RUN elasticsearch-plugin  install analysis-kuromoji

kibana/Dockerfile

FROM kibana:6.7.1

開発の流れ

今回は参考サイト[3]でチュートリアルをした。それを元にフローチャートを考えた。
1. まず、分析するデータを作成or見つける
2. index_templateを作成する。

つまり、そのtemplateを使ってindexを作成する
3. mapping_templateを作成する。

つまり、そのtemplateを使ってmappingを作成しておく。

mappingというのは、index内をtype別に綺麗に分ける際の決まりのこと。
4. データを登録する。

elasticsearchはjson形式のみ対応なので、うまく整形する。その時に便利なAPIを使えば大量のデータでも楽に登録ができる。
5. 検索やデータの分析

*(注意)開発のやり方について

開発に慣れている場合は、curlを使った方がわかりやすい。
ただ、検索はクエリが長くなるので'kibana'のDev toolのほうが楽。

注意点

  • shardとreplica[1]
    実際に動かしてみないとわからない。というのが本音。
    一応、開発時点ではコピーを作らなくすることで解決。つまり、replica数を0にする。
  • バージョンの違い

    参考サイトのelasticsearchのversionは大体がver.2であるが、最新はver.6

    その差がかなりのエラーを出すことがわかった。
    参考サイト[2]を参照してエラーを処理すること。

    • Content-Type の指定が必須
      > Elasticsearch への API は Transport通信を除いて、HTTP(s) リクエストによって操作します。Elasticsearch 5系までは自動検出していた Content-Type ヘッダですが、Elasticsearch 6系より指定が必須となりました。[2]
    • フィールドタイプにstringが指定できない > Elasticsearch 5系から文字列を扱うフィールドタイプがstringからtext、keywordに変更しました。5系ではstringタイプは非推奨となり指定することができました。6系ではstringタイプを指定するとエラーになるように変更となりました。[2]
  • mappingについて

    注意点として、一度定義したマッピングは変更することができない!!
    変更する場合はインデックスごと削除して再作成する必要がある・・・

    逆にフィールドの追加はできる。

参考サイト

[1]Elasticsearchのshardとreplica

[2]Elasticsearch 6 を利用する前に把握しておいた方がよさそうなこと

参考サイト

[1]3分で分かった気になる、Elasticsearchとは?

[2]Elasticsearch, KibanaをDocker環境で動かしてみた

[3]Elasticsearch 6 を使ったデータ検証 その1(Dockerでコンテナの作成と確認)

[4]公式サイトのチュートリアル

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1