Elasticsearch 6 を使ったデータ検証 その3(bulkでデータを投入してみる) - 株式会社CoLabMix

Elasticsearch 6 を使ったデータ検証 その3(bulkでデータを投入してみる)

さて、前回に引き続き Elasticsearch でのデータ登録です。

★関連記事
Elasticsearch 6 を使ったデータ検証 その1(Dockerでコンテナの作成と確認)

Elasticsearch 6 を使ったデータ検証 その2(マッピングの登録をしてみる)

Elasticsearch 6 を使ったデータ検証 その4(チュートリアル記事とデータの検索での比較)

Elasticsearch 6 を使ったデータ検証 その5(クエリでの検索)

Elasticsearch 6 を使ったデータ検証 その6(Aggregationを使った分類・集計)

Elasticsearch 6 を使ったデータ検証 その7(Analyzerについて)

 

今回は大量のデータがあるのでファイルから一括登録のbulk APIで登録してみます。

bulk登録での注意点などは以下のサイトが参考になります。

★ elasticsearch のBulk APIでは改行してはならない
http://sora-sakaki.hatenablog.com/entry/2015/08/19/160956

 

ドキュメントにもあるようにフォーマットは一行づつ「\n」で終了してデータを登録をする形になります。
https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html

1行目にアクション、2行目にリクエストボディを書くことで登録ができるようです。

アクションは「create」、「index」、「update」、「delete」の4つ。

createではドキュメントの新規作成。
indexではドキュメントの新規作成かアップデートになるようです。

 

データの作成

さて、ここは環境によって違いそうですからサクッと。

今回はpythonで変換行いましたが、あくまでサンプルということで。

本当はjqだけでやりたかったのですが、綺麗にまとまりませんでした。

 

 

それでは実行してみます。

そこそこの時間で変換が完了しました。

 

データの投入

次にデータの投入を行います。

まずはrestaurantでのデータの登録です。

上が標準出力あり、下が無しでの結果です。

ファイルからの登録件数が「214,263」件なので思ったよりもかなり早いです。

次にratingの取り込みです。

さて、ここでデータを一気に投入しようと思いましたがデータが全く入りませんでした。

どうもファイルサイズの制限(100M)を超えてしまったようです。

 

★ Elasticsearch のbulk APIのMaxファイルサイズを探る
https://syossan.hateblo.jp/entry/2017/09/04/170609

検証なんでファイル制限を変更してテストしようかとも思いましたが、多分この制限を超えるようなことは実際にはしないのでsplitで分割しました。

設定の変更は以下のURLを参考に変更できます。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html

 

今回利用した分割後のファイルは以下になります。

 

それではデータを分割したファイルのアップロードをしてみます。

同じように上が標準出力ありで下が標準出力無しです。

ファイルのデータ件数は「205,833」件なので、速度的には予想以上には早いですが、実質はエラーを見ながらの対応が必要になります。

 

日付の扱い

さて、ratingの方では日付の扱いを行っています。

今回は加工の際に、ISOフォーマットに従いJSTの+09:00でデータの作成を行っています。

日付の扱いは以下のサイトが参考になりました。

★公式ドキュメント
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html

★Elasticsearch の日付検索を検証
http://blog.yoslab.com/entry/2014/04/24/000317

実際に少量のサンプルデータので検証ではきちんと範囲指定が動いてくれています。

 

色々と実施して見ましたがとりあえずデータ投入としてはここまでで。

次回にようやく検索を行ってみます。

 

★関連記事

Elasticsearch 6 を使ったデータ検証 その1(Dockerでコンテナの作成と確認)

Elasticsearch 6 を使ったデータ検証 その2(マッピングの登録をしてみる)

Elasticsearch 6 を使ったデータ検証 その4(チュートリアル記事とデータの検索での比較)

Elasticsearch 6 を使ったデータ検証 その5(クエリでの検索)

Elasticsearch 6 を使ったデータ検証 その6(Aggregationを使った分類・集計)

Elasticsearch 6 を使ったデータ検証 その7(Analyzerについて)

 

このブログは株式会社CoLabMixによる技術ブログです。

GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。

Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。

開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。

お問い合わせやご依頼・ご相談など

     

    関連記事

    1. [Rails] SJISのエクスポートでの「ActionView::T…

    2. LPIC 102を受験してみました。

    3. Tableau Hyper API使用例(CSVからHyperへ変換)…

    4. Pythonでのgoogle-cloud-bigqueryライブラリを…

    5. scrapy-redisを使って、redisを使ったクローリングを試…

    6. terraformでRDS PROXYの設定