🙆♀️
Kibana Dev Toolsからドキュメントにデータフィールドを追加する
各ドキュメントがもつデータフィールド(title
とかbody
とか。elasticにおける正式名称はpropertyと言うらしい)を追加したい場合。
mappingにフィールドを追加する
例えばalphaというインデックスにupvoteとdownvoteのinteger型のフィールドを追加したい場合。こちらはPUTメソッドで追加される。
GET /alpha/_mapping
PUT /alpha/_mapping
{
"properties": {
"upvote": {
"type": "integer"
},
"downvote": {
"type": "integer"
}
}
}
各ドキュメントにフィールドとデータを追加する
ドキュメントにフィールドとデータを追加する場合はPOSTメソッドを使う。mappingのようにPUTメソッドを使うとドキュメントが上書きされてしまうので注意!またmappingでフィールドを追加していないフィールドもこれで追加できてしまう‥。mappingの有無による違いを知りたい‥。
GET /alpha/_doc/e6L1aHwBjwrw3arokzTv
// upvote: 3 を追加
POST /alpha/_update/e6L1aHwBjwrw3arokzTv
{
"script" : "ctx._source.upvote = 3"
}
//// ちなみにフィールドデータがstring型の場合はシングルクォーテーションで値を囲む必要がある
POST /alpha/_update/e6L1aHwBjwrw3arokzTv
{
"script" : "ctx._source.title = 'かも知れない運転でいけ'"
}
// フィールドupvoteを削除
POST /alpha/_update/e6L1aHwBjwrw3arokzTv
{
"script" : "ctx._source.remove('upvote')"
}
// integer型(Numbers型)であるフィールドupvoteを+1する
POST /alpha/_update/e6L1aHwBjwrw3arokzTv
{
"script" : {
"source": "ctx._source.upvote += params.count",
"lang": "painless",
"params" : {
"count" : 1
}
}
}
このctx._source
の部分はおまじないっぽく、現状こう書くしかないよう。
Discussion