用了Elasticsearch,一口气上5T

有没有办法在 logstash 中删除 nested 中符合条件的 object?

Logstash | 作者 living | 发布于2019年09月24日 | 阅读数:1340

现有的 log 是这样的
account     123456789
character     abcd
inventory_item     {
  "item_count": 10,
  "item_equipped": false,
  "item_name": "魔方",
  "item_id": 49255,
  "item_type": "12",
},
{
  "item_count": 1,
  "item_equipped": true,
  "item_name": "黄金甲",
  "item_id": 40745,
  "item_type": "0",
},
{
  "item_count": 1,
  "item_equipped": false,
  "item_name": "白甲",
  "item_id": 40746,
  "item_type": "0",
},
{
  "item_count": 6314,
  "item_equipped": true,
  "item_name": "黄金箭",
  "item_id": 40747,
  "item_type": "1",
},
{
  "item_count": 631434,
  "item_equipped": false,
  "item_name": "黄金",
  "item_id": 40748,
  "item_type": "10",
}

希望能够把非装备的物品,从 inventory_item 中删除。
即保存 item_equipped == true 的物品
 
即获得以下结果:
account	   	123456789
character abcd
inventory_item {
"item_count": 1,
"item_equipped": true,
"item_name": "黄金甲",
"item_id": 40745,
"item_type": "0",
},
{
"item_count": 6314,
"item_equipped": true,
"item_name": "黄金箭",
"item_id": 40747,
"item_type": "1",
}
请问各位大神有什么方法可以实现?
已邀请:

living

赞同来自: doom

已解決
 
    ruby {
code => '
a = event.get("inventory_item")
a = a.delete_if { |x| ! x["item_equipped"] }
event.set("inventory_item", a)
'
}

liuxg - Elastic

赞同来自:

你可以试一下如下的办法:
POST inventory_item/_delete_by_query
{
  "query": {
    "match": {
      "item_equipped": false
    }
  }
}

要回复问题请先登录注册