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

エロサイトの作り方

2013年11月から勉強しながらエロサイトを作っています。

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()関数があったので、それを呼んだら終了するようになった。

これでいいのかなぁ?