読者です 読者をやめる 読者になる 読者になる

PGは電子羊の夢を見るのか?

データとパターンのあいだ

Elasticsearchを準備してKibanaでグラフを表示するまで

プログラミング

1. Elasticsearchをインストールする

$ brew install elasticsearch

※ 2015/10/30現在、brewでインストールされるelasticsearchは1.7.3。

2. Elasticsearchにプラグインをインストールする

今回インストールしたのは、起動用のスクリプト形態素解析エンジンのkuromoji。

$ /usr/local/bin/plugin -install elasticsearch/marvel/latest
$ /usr/local/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0

3. Elasticsearchを起動する

$ elasticsearch

4. AnalyzerとMappingの設定

今回は以下のように設定。

{
  "settings": {
    "analysis": {
      "filter": {
        "pos_filter": {
          "type": "kuromoji_part_of_speech",
          "stoptags": [
            "助詞-格助詞-一般",
            "助詞-終助詞"
          ]
        },
        "greek_lowercase_filter": {
          "type": "lowercase",
          "language": "greek"
        }
      },
      "tokenizer": {
        "kuromoji": {
          "type": "kuromoji_tokenizer"
        }
      },
      "analyzer": {
        "kuromoji_analyzer": {
          "type": "custom",
          "tokenizer": "kuromoji_tokenizer",
          "filter": [
            "kuromoji_baseform",
            "pos_filter",
            "greek_lowercase_filter",
            "cjk_width"
          ]
        }
      }
    }
  },
  "mappings": {
    "post": {
      "_source": {
        "enabled": true
      },
      "_all": {
        "enabled": true,
        "analyzer": "kuromoji_analyzer"
      },
      "properties": {
        "id": {
          "type": "integer",
          "index": "not_analyzed"
        },
        "name": {
            "type": "string",
            "index": "not_analyzed"
        },
        "text": {
          "type": "string",
          "index": "analyzed",
          "analyzer": "kuromoji_analyzer"
        }
      }
    }
  }
}

上半分がAnalyzer、下半分がMappingの設定。
これをanalyzer.jsonというファイルにしてElasticsearchにPUT。

$ curl -XPUT localhost:9200/post-demo --data-binary @analyze.json

5. Elasticsearchにデータを投入

設定したMappingに合わせてデータをjson形式にしてPOSTする。

{"index": {"_id": 1, "_type": "post", "_index": "post-demo"}}
{"id": 1, "name": "user1", "text": "今日の天気は曇だった。"}
{"index": {"_id": 2, "_type": "post", "_index": "post-demo"}}
{"id": 2, "name": "user2", "text": "今日は昨日に比べて暖かかった。"}
{"index": {"_id": 3, "_type": "post", "_index": "post-demo"}}
{"id": 3, "name": "user1", "text": "まさかの大雨。昨日洗濯しておくべきだった。"}

今回はこれをdata.jsonというファイルにしておき、ElasticsearchにPOST。

$ curl -XPOST localhost:9200/_bulk --data-binary @data.json

念のため、GETでデータが正しく投入されていることを確認。

$ curl -XGET localhost:9200/post-demo/post/_search -d '{"query":{"match":{"text":"天気"}}}'

6. Kibanaのダウンロードと起動

こちらからkibanaをダウンロードしてくる。
※ kibana 4.2.0以降はelasticsearch 2.0.0以降でないと動作しませんでした。今回elasticsearch 1.7.3を使用しているので、kibana 4.1.2をここから落としてきて使用します。

ダウンロードしてきて中身を取り出せたら、kibanaを起動します。

$ [kibanaのホーム]/bin/kibana

7. kibanaの設定

(http://localhost:5601/)へアクセスし、「index name or pattern」に作成したインデックス名(今回はpost-demo)を入れる。また、今回は「Index contains time-based events 」のチェックを外しておく。

8. kibanaでグラフを表示する

メニューバーの「Visualize」から好きなグラフの形を選択、X軸・Y軸それぞれの要素を決定してグラフを表示。

最後に

後半がテキトウになった感は否めない。