elasticsearchでdocumentのindexを行う時に、そのdocumentを表す_idをsourceの中の指定したカラムから決めるというものがある。pathというもの。
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html#_path
mappingsを作る時に以下のように指定することで、Index APIでPOSTを利用しても自動的にpost_idを_idに入れてくれる。
{ "tweet" : { "_id" : { "path" : "post_id" } } }
これを使おうとしていたら、なんとdeprecatedだった。
事情がよく分からなかったのでtwitterでつぶやいてたら、johtaniさんが教えてくれました。ありがとうございます。
@shiba_yu36 ですね。インデキシングする時にJSONパースしないといけないので、パフォーマンス的にはドキュメントの外に指定した方が良いかと。このあたりでしょうか。 https://t.co/3YhdzYp75p
— Jun Ohtani (@johtani) 2015年6月5日
つまり、インデクシングする際に指定されたドキュメントから、何かを取り出そうとすると、jsonでparseしなければならないため、パフォーマンスに影響が出てしまうということのようだった。
クライアント側で_idを指定するべきとなっていたので、諦めてそうすることにした。