はてだBlog(仮称)

私的なブログど真ん中のつもりでしたが、気づけばWebサイト系のアプリケーション開発周りで感じたこと寄りの自分メモなどをつれづれ述べています。2020年6月現在、Elasticsearch、pandas、CMSなどに関する話題が多めです。...ですが、だんだんとより私的なプログラムのスニペット置き場になりつつあります。ブログで述べている内容は所属組織で販売している製品などに関するものではなく、また所属する組織の見解を代表するものではありません。

Elasticsearchにlivedoorレストランデータセットを取り込んでみる(Pandasで全文検索向けにプレデータ加工あり)

Elasitcsearchで「全文検索」寄りでいろいろ遊んでみようと思うと、程よい公開データが欲しくなります。

そんなデータの一例として、livedoorレストラン DataSetというのがありますので、こちらを利用させてもらって勉強するというのも一つの手かと思います。

blog.livedoor.jp

CSVをkibanaやその他の機能で取り込みしても良いでしょうが、今回は全文検索ということで、正規化されてテーブルごとに分割されている各CSVを結合して、1ドキュメント1レストランデータのJSONドキュメント化して、これをバルクロードしたいと思います。

この類のものは、遊んでみるだけであればそれほど難しくないのですが、いざやり始めると手練れの方でもデータを確かめながらになったりそれはそれで時間を要すると思います。

多少私の好みに寄せたドキュメント形式(プロパティ構成)になっていますが、Elasticsearchすげぇってことで、ある程度雑にインポートしてもよろしくやってくれるので、結果、ぼちぼち良い感じかなというところで、サンプル公開させていただきます。

Elasticsearchと名がついた記事ですが、実態はPandasのサンプルプログラムの分量が多いですね....

確認に使ったElasticsearchのバージョン: 6.8 Pandasのバージョン: 1.0.1

生成されるドキュメントデータイメージ(1件)

元の項目を残しつつ(ただし以下では簡単のため取り除きました)、次のようなドキュメントプロパティになるようにデータを派生生成します。

f:id:azotar:20200602232245p:plain

サンプルプログラム

livedoorレストランDataSetをダウンロードして伸張したディレクトリで、次のPythonプログラムを起動してください。 Elasticsearchのサーバのアドレスや取り込み先のインデックス名はよろしく改変してください。(ここでは、「ldgourmet」という名前のインデックスに取り込むこととしています。)

見てのとおり、pandasはもちろん、PythonのElasticsearchクライアントも利用していますので、必要なら事前にインストールをお願いします。

途中、バルクロード用のJSONファイルを出力するわけではないのですが、仮に出力するとした場合はおおよそ250MBぐらいの容量になりました。

また、Elasticsearch(ローカル起動)へのバルクロード所要時間は、手元の端末(iMac Retina 5K, 27-inch, Late 2014)で約10分ほどです。

livedoor グルメのDataSet のCSVをElasticsearchでの全文検索を意識し…

Mapping設定

取り込みに使ったMapping設定は前項の後半のJSONファイルの内容のとおりです。 (ただし、インポートができるかできないかでいうと、このMapping設定は必須ではありません。)

ちなみに、プログラムとJSONファイル相当をエンベッドしましたが、今みるとインデントが崩れているように見えます。

もしお手元でもインデントなどが変だということであれば、リンク先のGistか「raw」表示で適宜ご覧いただくようお願いします。

また、Mapping、Analyzer設定については、次の過去記事も参照いただけると嬉しいです。

itdepends.hateblo.jp

ひとまず

以上です...

kibanaのDevToolsなどで

GET /ldgourmet/_search

などとやると次のようなデータが戻ってきます。

f:id:azotar:20200602234907p:plain

思ったより長くなったので、取り込んだデータを使った全文検索についてはまた改めて。

検索本道ではありませんが、このデータを使ったAggregationsの例はこちら。

itdepends.hateblo.jp

その他

この記事は以下の過去記事の部分リバイバルだったりします。当時よりは少々Pandasの使い方が洗練されたかもしれない(ひとりごと)。

itdepends.hateblo.jp