DRYな備忘録

Don't Repeat Yourself.

Elasticsearchでpartial update

たとえば、users_indexに以下のようなuserというtypeがあったとする

{
    "id": 1234,
    "name": "otiai10",
    "age": 29,
    "lang": ["go","js","python"],
    "description": "落合展です。10は「じゅう」じゃなくて「テン」と読みます。"
}

全体アップデート

ドキュメント全体をアップデートしたいときはこうする

curl -X PUT ":9200/users_index/user/1234" -d '{
    "id": 1234,
    "name": "otiai10",
    "age": 29,
    "lang": ["go","js","python"],
    "description": "otiai10です。10は「じゅう」じゃなくて「テン」と読みます。"
}'

これ間違えてこういうことすると吹っ飛ぶ

curl -X PUT ":9200/users_index/user/1234" -d '{}'
curl -X GET ":9200/users_index/user/1234?pretty"
{
  "_index" : "users_alias",
  "_type" : "user",
  "_id" : "1234",
  "_version" : 2,
  "found" : true,
  "_source":{}  # <- これな
}

部分アップデートしよう

Partial Updates to Documents

curl -X POST ":9200/users_index/user/1234/_update" -d '{
  "doc": {
    "description": "otiai10です。10は「じゅう」じゃなくて「テン」と読みます。"
  }
}'

PUTだとNo handler found for uri [/_update] and method [PUT]になるので注意。POSTです。

DRY