🦷
node.js から Elasticsearch を触る
最近の 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