🦷

node.js から Elasticsearch を触る

2022/12/29に公開

最近の Elasticsearch はセキュリティ向上のために API キーによる認証と同時に、クライアント証明書による接続が求められてしまいます。

あらかじめ Elasticsearch サーバー上で APIキー を発行して、接続用のクライアント証明書を http_ca.crt として実行スクリプトから見える場所に持ってきておきます。そして、アクセス前にクライアントを初期化しておくコードを書くと以下の通りになります。

tooteater.js
const { Client } = require('@elastic/elasticsearch')
const es = new Client({
  node: 'https://localhost:9200',
  auth: {
    apiKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  },
  tls: {
    ca: fs.readFileSync('./http_ca.crt'),
    rejectUnauthorized: false
  }
})

こうすると es オブジェクトを通じて Elasticsearch API を呼び出すことが出来るようになります。

追加するとき

payload.uri をキー(id)にして、新しいものが来たときは insert して、同じものが複数回来たときには上書きする → upsert をオンにしています。

es.update({
  index: index_name,
  id: payload.uri,
  body: {
    doc: payload,
    doc_as_upsert: true
  }
})

また格納先になる index は一つに固定するのではなく、日付別やドメイン別などで分けておくと、後々スケーリングするときの戦略が増えます。

削除するとき

追加したときと同じ id をキーにして delete メソッドを呼び出すと物理削除されます。

es.delete({
  index: index_name,
  id: res._source.uri
})

Discussion