まちBBS の スレッドリストをElasticsearch に突っ込んでみる
Elasticsearch をDockerで動かしてみたんですが、データを入れないと
全然面白くなくてつまらないですね。
せっかくなので大量のデータを流し込んでみたいっ!
というわけで 差しあたってデータ量の多そうな 掲示板のデータを突っ込んでみることにしました。
■全文検索を行うためのプラグインを導入します
以下のページを参考に kuromoji を入れます。
http://qiita.com/mserizawa/items/8335d39cacb87f12b678
簡単。
■まちBBS のスレッドリストを取得します。
Python で まちBBS のスレッドリストをJSONで取得してみました。
python を実行する環境ももちろんDockerで用意します
docker run -dP --name pyhost moremagic/ubuntu-sshd ssh -p <フォワードされた22ポート> root@localhost apt-get update && apt-get upgrade -y && apt-get install -y python curl wget vim
上記環境でスクリプトを作ります。
Python 2.7.9 で作っています。
JSON 構造は適当。
subback-get.py
#!/usr/bin/python # coding: UTF-8 import contextlib import urllib2 import sys reload(sys) sys.setdefaultencoding('utf-8') def getSubBack(url): ret = '' with contextlib.closing(urllib2.urlopen(url)) as resp: html = resp.read() for line in html.split('\n'): if line.strip().startswith('<a href='): link = line[line.index('="')+2:line.rindex('"')] title = line[line.index('>')+1:line.rindex('<')] ret += '{"index": {} }\n{ "name": "' + title + '", "link":"http://machi.to/bbs/read.cgi/' + url[url.index('to/')+3: url.rindex('/')] + '/' + link + '"}\n' return ret # 参考; http://qiita.com/zarchis/items/3258562ebc9570fa05a3 def conv_encoding(data): lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213', 'shift_jis', 'shift_jis_2004','shift_jisx0213', 'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3', 'iso2022_jp_ext','latin_1', 'ascii') encode = None for encoding in lookup: try: data = data.decode(encoding) encode = encoding break except: pass if isinstance(data, unicode): return data,encode else: raise LookupErrorconv_encoding url = 'http://machi.to/@@@/subback.html' locale = ['hokkaidou', 'tohoku', 'kousinetu', 'kanto', 'tokyo', 'tama', 'kana', 'tokai', 'kinki', 'osaka', 'cyugoku', 'sikoku', 'kyusyu', 'okinawa' ] for l in locale: #print url.replace('@@@', l) #print conv_encoding(ret)[1] ret = getSubBack( url.replace('@@@', l ) ) print ret.decode( conv_encoding(ret)[1] ).encode('utf-8')
■Elasticsearch に突っ込んでみます
先ほど作った Docker Elasticsearchに JSONデータを突っ込みます。
python ./subback-get.py > subback.json curl -X POST http://192.168.1.6:9201/machibbs/subback/_bulk --data-binary @subback.json
■Elasticsearch を確認してみます。
おぉぉぉ!入ってますね!