初心者のためのElasticsearchその3 -node.jsからアクセスする-

2018.12.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

その2ではElasticsearchに対するいろいろな検索を実行してみました。
これまではcurlをつかってコンソールからアクセスしていましたが、
今回はNode.jsのes用npmモジュールをつかってJavascriptでアクセスしてみましょう。
※本稿で使用する環境についてはこれまでの記事を参照してください

環境

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.12.6
  • node : 11.2.0
  • Elasticsearch : 6.5.3

node環境セットアップ

MacならHomeBrewでインストールするかこのへんをみてnode.jsをインストールしましょう。
nodeコマンドでバージョン番号が表示できたらインストールOKです。

% node -v
v11.2.0

※なお、以前設定したように、Elasticsearchの起動とサンプルデータの登録は完了させておきましょう

次にelasticsearchモジュールをインストールします。

% npm install elasticsearch

モジュールをインストールしたらjsファイルを記述しましょう。
elasticsearchモジュールの使い方は簡単です。
elasticsearch.Client作成時にhostを渡すだけでOKです。

//main.js
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
  host: 'localhost:9200'
  });

elasticsearch.ClientにはConfigオブジェクトを渡すことも可能です。
タイムアウト時間やリトライ回数なども設定可能ですので、こちらを参照してください。

Elasticsearchが正常に起動しているかpingを使って確認してみましょう。

client.ping({
  requestTimeout: 2000
}, function (error) {
  if (error) {
    console.error('elasticsearch cluster is down');
  } else {
    console.log('All ok');
  }
});

問題なければAll okと表示されます。

% node main.js
All ok

searchを使えば検索が可能です。
bodyプロパティにクエリオブジェクトを記述し、結果をコールバックで受け取ります。

client.search({
  index: 'user_index',
  body: {
    query: {
      match_all: {}
    }
  }
}).then(function (resp) {
    console.log(resp.hits.hits);
}, function (err) {
    console.log(err.message);
});

これは、kibanaのdev toolで下記クエリを実行したのと同じ意味になります。

GET /user_index/_search
{
  "query": { "match_all": {} }
}

まとめ

とても簡単にJavascriptからElasticsearchにアクセスできることがわかりますね。
これ以外にもbulkやcatなど、Elasticsearchで可能なAPIは揃っています。
詳しくはドキュメントを参照してください。