我有一个库存表,其中有商店/产品的库存:
input {
jdbc {
statement => "SELECT ShopId, ProductCode, Quantity FROM stock ORDER BY productcode;"
}
}
然后我有一个简单的过滤器来汇总该数据:
filter {
aggregate {
task_id => "%{productcode}"
code => "
map['productcode'] ||= event.get('productcode')
map['objectID'] ||= event.get('productcode')
map['stocks'] ||= []
map['stocks'] << {
'ShopId' => event.get('ShopId'),
'quantity' => event.get('quantity'),
}
event.cancel()
"
push_previous_map_as_event => true
timeout => 3
}
}
这给了我期望的输出,例如:
{
"productcode": "123",
"objectID": "123",
"stocks": [
{
"ShopId": 1
"Quantity": 2
},
{
"ShopId": 2
"Quantity": 5
}
]
}
现在我可以通过http输出插件将该数据推送到Algolia。 但是我的问题是,成千上万的对象可以进行数千次调用。
这就是为什么我认为使用批处理终结点,将那些对象打包到文件包中的原因。 1000个对象,但为此,我需要将结构调整为:
{
"requests": [
{
"action": "addObject",
"body": {
"productcode": "123",
"objectID": "123",
...
}
},
{
"action": "addObject",
"body": {
"productcode": "456",
"objectID": "456",
...
}
}
]
}
在我看来,它就像另一个聚合函数,但是我已经尝试过:
aggregate {
task_id => "%{source}"
code => "
map['requests'] ||= []
map['requests'] << {
'action' => 'addObject',
'body' => {
'productcode' => event.get('productcode'),
'objectId' => event.get('objectID'),
'stocks' => event.get('stocks')
}
}
event.cancel()
"
push_previous_map_as_event => true
timeout => 3
,但不起作用。
同样,使用这种类型的聚合函数,我无法配置要发送到批输出的大包。
我将非常感谢您的帮助或线索。