はじめに
タイトルの通りです。Rondhuitが公開しているLivedoorのニュース記事データをElasticsearchにインデックスするツールを作ったので紹介します。
検索系の開発をする場合、検索の精度を確認するためにはある程度のテストデータが必要で、それを用意するのは意外と手間がかかります。そこでRondhuit社様がそのような迷える子羊たちのためにテストデータを公開してくださっています。ありがたや。
RondhuitさんはApache Solrを扱う会社なのでSolr向けのXMLデータが提供されていますが、それと同時にプレーンテキスト形式も公開されています。そこでこちらのデータをダウンロードしてElasticsearchにアップロードするまでを簡単に行うツールにして、上記のリポジトリで公開しました。
当然データの著作権等についてはこちらの責任範囲外ですので、上記Rondhuit社のWebページにある記載を確認の上ご利用ください。
使い方
使い方はリポジトリのREADMEに書いてあるとおりですし、何より極めてシンプルなスクリプトなのでご自由に改変して使ってください。
とはいえ、一連の流れについては一応ここにも書いておきます。
データのダウンロードと展開
とりあえずリポジトリをクローンしてください。
$ git clone git@github.com:daixque/livedoor_corpus_ingester.git
リポジトリのトップディレクトリに移動の上、以下のようにスクリプトを実行してください。
$ ./download_corpus.sh
するとdataディレクトリが作成され、その中にダウンロードした記事データが展開されます。
Elasticsearchへの接続情報の設定
env.sample
ファイルを.env
にリネームの上、ES_CLOUD_ID
とES_API_KEY
を適切なものに設定してください。
ちょっと記事を書いている時点ではアクセス先の設定はCloud IDとAPI Keyしか対応していません。他の方法で繋ぎたい場合は、Pythonスクリプトをささっと書き換えてください。upload.pyのここです。
es_client = Elasticsearch(
cloud_id=ES_CLOUD_ID,
api_key=ES_API_KEY,
request_timeout=60,
)
記事データのアップロード
Pythonはインストールされているものとします。その上で依存ライブラリをインストールします。
$ pip install -r requirements.txt
では記事をアップロードしましょう。以下のコマンドを実行します。
$ python upload.py {corpus_name}
ここで、コーパス名(corpus_name)は以下が選択できます。
- dokujo-tsushin
- it-life-hack
- kaden-channel
- livedoor-homme
- movie-enter
- peachy
- smax
- sports-watch
- topic-news
データ構造
アップロードされるインデックス名は以下のようになっています。
livedoor_corpus_{corpus_name}
インデックスされるそれぞれのドキュメントは以下のフィールドを持ちます:
- id: ドキュメントID
- url: 記事のURL
- date: 日付
- title: タイトル
- content: 本文
indexディレクトリにインデックステンプレートのサンプルがあるので、そちらも参考にしてください。
おわりに
今回はデータを自分で準備したわけでも、何か新しい機能を紹介したわけでもありませんが、テストデータの準備という頻繁にやらないといけない作業を少し楽にするツールを公開、紹介しました。地味に便利だと思いますので新機能の検証などの際に利用してください。