年中アイス

いろいろつらつら

elasticsearch bulkAPIで地味にはまる

elasticsearch 6.3が出たので、データ突っ込んで試してみるかと、index作ってデータを投入することに。 curl叩きながら、確認を進めてましたが、BulkAPIを使って、データを入れるときに、以下のようなエラーが出ました。

{"error":"ActionRequestValidationException[Validation Failed: 1: no requests added;]","status":400}

400でvalidationなので、投げてる側の問題と判断して、BulkAPI用のJSONを眺めてみても、特にJSONとしてもelasticsearchとしても問題なさそう。 判明した原因は、curl-dを使っていたことでした。ドキュメントにも

If you’re providing text file input to curl, you must use the --data-binary flag instead of plain -d. The latter doesn’t preserve newlines.

curlなら--data-binaryを使ってくださいと書いてあり、-dがこの省略形かと勘違いしていました。 create indexや検索など他のエンドポイントだと-dでも通るのでなんでだろうと。

elasticsearchのドキュメントちゃんと書いてあってすごいですね。

参考