インデクシングしたいデータがCSVだった場合、CSVからjsonへの変換は意外と面倒だったりしませんか。

そんな場合、CSV River Pluginを使ってCSVから直接インデクシングがオススメです。

CSV River Plugin

インストール

(ver 2.0.1の場合。ESとのバージョン対応は上記Githubで要確認)

1
bin/plugin -install river-csv -url https://github.com/AgileWorksOrg/elasticsearch-river-csv/releases/download/2.0.1/elasticsearch-river-csv-2.0.1.zip

登録

こんな感じ。他のオプションは上記ページで要確認

1
2
3
4
5
6
7
8
9
10
11
12
13
14
curl -XPUT localhost:9200/river/my_csv_river/meta -d ’ {
  "type" : "csv",
  "csv_file" : {
    "first_line_is_header":"true",
    "folder" : "/tmp",
    "filename_pattern" : ".*\\.csv$"
  },
  "index" : {
    "index" : "index_name",
    "type" : "type+name",
    "bulk_size" : 1000,
    "bulk_threshold" : 10
  }
}

しかし罠がありました。


GithubのREADME.mdには一言も書いてませんが、処理されたCSVファイルは以下の命名規則でRenameされます。


(hoge.csvの場合)

  • 読み込み中:hoge.csv.processing
  • 読み込み済:hoge.csv.processing.imported

登録のjsonを見れば雰囲気でわかりますが、folder以下のfilename_patternで指定したファイルが対象になります。

そのため、

1
“filename_pattern” : “.*”

みたいな正規表現で設定すると、読み込み済みのCSVファイルが、次回polling時に読み込み対象になります。

pollingはデフォルト60minなので(変更可)、1時間ごとにすべてのファイルが再インデクシングされます。

デフォルト値が上記正規表現なので、通常であればこのままにしとくのが吉です。


変更する場合、登録する正規表現は

.csv$

で終わるようにしましょう。