Elasticsearchの確認系コマンド6つ

開発する際などにちゃんと設定したことが反映されているかなどを確認するためによく使うのでメモとして残しておきます。

  • Elasticsearchの情報の確認
  • プラグイン/モジュール一覧
  • インデックス一覧
  • インデックスのマッピング確認
  • 1件取得
  • アナライザーの動作確認

Elasticsearchの情報の確認

curl localhost:9200/_nodes/stats?pretty

メモリ使用量やインデックスの情報など様々な情報が得られます。

詳細はNodes Statsにあります。情報量が多いので例えば物理メモリの合計バイト数(ios.mem.used_in_bytes)を調べるにはjqコマンドを使ってこのようにすると簡単に確認できます。

curl localhost:9200/_nodes/stats |jq .nodes[].os.mem.used_in_bytes

プラグイン/モジュール一覧

curl http://localhost:9200/_nodes/plugins?pretty

リクエストすると↓の様にプラグインやモジュールの名前やバージョンなどの情報を確認できます。

      "plugins" : [
        {
          "name" : "analysis-kuromoji",
          "version" : "7.3.2",
          "elasticsearch_version" : "7.3.2",
          "java_version" : "1.8",
          "description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.",
          "classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin",
          "extended_plugins" : [ ],
          "has_native_controller" : false
        }
      ],
      "modules" : [
        {
          "name" : "aggs-matrix-stats",
          "version" : "7.3.2",
          "elasticsearch_version" : "7.3.2",
          "java_version" : "1.8",
          "description" : "Adds aggregations whose input are a list of numeric fields and output includes a matrix.",
          "classname" : "org.elasticsearch.search.aggregations.matrix.MatrixAggregationPlugin",
          "extended_plugins" : [ ],
          "has_native_controller" : false
        },
        {
          "name" : "analysis-common",
          "version" : "7.3.2",

インデックス一覧

curl http://localhost:9200/_aliases?pretty

インデックスとエイリアスの情報が取得できます。

{
  "tags_20191014_141950" : {
    "aliases" : {
      "tags" : { }
    }
  },
  "tags_20191014_141950" : {
    "aliases" : {
      "tags" : { }
    }
  },
  "posts_20191014_141950" : {
    "aliases" : {
      "posts" : { }
    }
  }
}

インデックスのマッピング確認

curl http://localhost:9200/<indexname>/_mapping?pretty

<indexname>の部分にインデックス名かエイリアス名を入れてリクエストすることでインデックスの情報を取得できます。

{
  "tags" : {
    "mappings" : {
      "dynamic" : "false",
      "properties" : {
        "id" : {
          "type" : "integer"
        },
        "name" : {
          "type" : "text",
          "analyzer" : "ngram_analyzer"
        },
        "number_of_use" : {
          "type" : "integer"
        }
      }
    }
  }
}

1件取得

curl http://localhost:9200/<indexname>/_search?pretty -H "Content-type: application/json" -d '{"size":1}'

1件だけ取得してデータが入ったか確認できます。

{
  "took" : 274,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "tag_20191014_141950",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "id" : 1,
          "name" : "MySQL",
          "number_of_use" : 8
        }
      }
    ]
  }
}

アナライザーの動作確認

curl -X POST 'localhost:9200/<indexname>/_analyze?pretty' -H "Content-type: application/json" -d '{"analyzer": "kuromoji", "text": "焼肉定食を食べた"}'

textの部分に確認したい文字列をいれることでどのようにアナライザーがテキストを分解しているか確認することができます。

{
  "tokens" : [
    {
      "token" : "焼肉",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "定食",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "食べる",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "word",
      "position" : 3
    }
  ]
}