Node.jsからElasticsearchに全文検索をかける
過去2回の悪戦苦闘から、ようやくNode.jsを使うところまできました。
elasticsearch-jsを入れる
elasticsearch/elasticsearch-js · GitHub
Official Elasticsearch client library for Node.js and the browser
Elasticsearchのクライアントはやたらあるのですが、オフィシャルで。
$ npm install --save elasticsearch
ソース
var inspect = require('util').inspect;
var _ = require('underscore');
var Elasticsearch = require('elasticsearch');
var client = new Elasticsearch.Client({
host: 'localhost:9200',
// log: 'trace'
});
var keyword = process.argv[2] || '貧乳';
client.search({
index: 'test',
type: 'pages',
body: {
fields: ['title', 'postDate'],
query: {
match: {
title: keyword
}
}
}
}).then(function (response) {
console.log('total:', response.hits.total);
console.log('length:', response.hits.hits.length);
_.each(response.hits.hits, function (hit) {
console.log(hit.fields.postDate, hit.fields.title);
});
}, function (err) {
console.log(err.message);
});
サンプルをちょっと手直ししただけですが。
実行
$ node es-test.js
total: 48407
length: 10
[ '2013-11-04T04:56:58.487Z' ] [ 'オカズランド 貧乳!貧乳!! WRYYYYYYYYYYY!!!' ]
[ '2013-11-14T11:00:02.418Z' ] [ '素人 貧乳 スレンダー' ]
[ '2013-11-15T14:33:25.355Z' ] [ '貧乳画像' ]
[ '2013-11-11T08:14:09.010Z' ] [ '貧乳コレクション' ]
[ '2013-11-07T15:17:36.847Z' ] [ '貧乳ヘアヌード' ]
[ '2013-08-07T04:30:31.590Z' ] [ '貧乳って素晴らしい' ]
[ '2013-10-18T14:40:29.664Z' ] [ '貧乳さんいらっしゃい!' ]
[ '2013-09-29T06:40:55.852Z' ] [ '微乳・貧乳画像' ]
[ '2013-09-08T03:03:37.000Z' ] [ '貧乳好きが抜ける貧乳画像ください' ]
[ '2013-11-11T08:59:48.100Z' ] [ '貧乳コレクション Part 7' ]
おー、結果でた。
しかし、プログラムが終了しない……
終了処理?を入れる
}).then(function (response) {
console.log('total:', response.hits.total);
console.log('length:', response.hits.hits.length);
_.each(response.hits.hits, function (hit) {
console.log(hit.fields.postDate, hit.fields.title);
});
client.close();
}, function (err) {
console.log(err.message);
client.close();
});
ドキュメントには書いていないのだけど、ソースを見たらclose()
関数があったので、それを呼んだら終了するようになった。
これでいいのかなぁ?