血と汗となみだを流す

クラウドエンジニアになるための修業の場

Elasticsearchを触りながら調べたことのメモ

概要

  • Amazon Elasticsearch Serviceを触って気になったところを調べながらoutputする
  • AWS関係なくElasticsearchの仕様に関することも気になったら調べる

Amazon Elasticsearch Service Domainって何?

Amazon Elasticsearch Service ドメインは、Amazon Elasticsearch Service コンソール、CLI、
または API を使用して作成する Elasticsearch クラスターです。

各ドメインは、指定した コンピューティング リソースおよびストレージリソースを備えたクラウド内の Elasticsearch クラスターとなります。

お客様はドメインの作成や削除、インフラストラクチャ属性の定義、アクセスやセキュリティの制御が可能です。
Amazon Elasticsearch Service ドメインは 1 つまたは複数実行できます。
  • つまりこれ
「Elasticsearch Service domain」は、Elasticsearchクラスターの実行に必要なすべてのリソースのコレクションです。

環境構築

  • terraformAmazon Elasticsearch Serviceを構築
  • Elasticsearch触るだけならローカルでコンテナ動かしてもよかったかもしれない
  • 上記つぶやいたら本業の人からコメントもらえた!
    • Javaが動く環境でtgz解凍→bin/elasticsearchで起動できる
    • 軽量で良いらしい・・・!

データ登録・検索

  • RESTで可能
  • 登録
    • /blogs/article/1
      • 「blogs」というインデックスに
      • 「article」というドキュメントを登録する
      • 「1」「2」「3」は、登録された個々のドキュメントのID
curl -H "Content-Type: application/json" -XPUT https://[es domain]/blogs/article/1 -d '
{
    "title": "Title First",
    "content": "I ate a ramen",
    "tags": ["dev", "calory", "Sugar"]
}
'

curl -H "Content-Type: application/json" -XPUT https://[es domain]/blogs/article/2 -d '
{
    "title": "Title Second",
    "content": "I brunk a beer",
    "tags": ["dev", "alcohol", "purintai"]
}
'

curl -H "Content-Type: application/json" -XPUT https://[es domain]/blogs/article/3 -d '
{
    "title": "Title Third",
    "content": "I go to bed",
    "tags": ["off", "sleep", "heeling"]
}
'
  • データ取得
    • 「content」フィールドが「beer」
$ curl -XGET https://[es domain]/_search?q=content:beer
{
    "title": "Title Second",
    "content": "I brunk a beer",
    "tags": ["dev", "alcohol", "purintai"]
}
}]}}
  • インデックス削除
    • 一発でINDEXごと消せるのちょっと怖い
$ curl -XDELETE https://[es domain]/blogs

mappingとは

  • RDBでいうテーブル定義
  • データの型によって自動でmappingしてくれる
  • 検索の要件によっては、自動でmappingしないで手動でやる
  • INDEXに既にデータが入っている場合、mappingの変更はできない
  • 変更したい場合はaliasを使って、既存のmappingから新しいmapping定義に移行させる方法を取る

  • mapping取得

curl -XGET https://[es domain]/blogs/_mapping
{
    "blogs": {
        "mappings": {
            "article": {
                "properties": {
                    "content": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "tags": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "title": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    }
                }
            }
        }
    }
}

indexオプション

  • 指定なしの場合は analyzed が適用(解析する)
  • not_analyzed の場合、解析しない

analyzerオプション

わかったこと

  • Amazon Elasticsearch Serviceの「domain」はElasticsearchクラスターの実行に必要なすべてのリソースのコレクション
  • 登録/検索がRESTで簡単にできるの素晴らしい
  • 自動でmappingしてくれる
  • フィールドの形態素解析とかやってくれるのとても便利
  • 以下2つから、マスターデータは別途持っておいたほうが良さそう
    • Elasticsearchのmapping変更はできない。aliasを使って新しいmappingに移行する
    • curl -XDELETE でINDEXごと消える。

あとがき

  • まだまだ奥が深そうだが、一旦概要はつかめたのでここまで
  • 次はAPI Gateway + LambdaからElasticsearch Serviceにアクセスしてみる