Abh*_*ora 3 elasticsearch elasticsearch-aggregation elasticsearch-painless
我想编写一个应该返回字典的无痛脚本。基本上,如果我将它与 java 相关联,我想要 Dictionary< String, List > 的输出。
所以,我需要轻松声明一个 Map 和 List。另外,我需要向其中添加数据(如map.add())
我可以举例说明如何声明地图并向其添加数据吗?
[painless] ( https://www.elastic.co/guide/en/elasticsearch/painless/6.7/painless-examples.html )中的示例并未涵盖这一点。
我用的是v6.7
你可以简单地这样做:
使用空字典创建文档
PUT index/1
{
"dict": {}
}
Run Code Online (Sandbox Code Playgroud)
更新文档以在参数中填充字典
POST index/_update/1
{
"script" : {
"source": "ctx._source.dict.putAll(params)",
"lang": "painless",
"params" : {
"key1": ["val1", "val2", "val3"],
"key2": ["val4", "val5"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用脚本从头开始索引文档(使用scripted_upsert)
POST index/_update/1
{
"scripted_upsert":true,
"script" : {
"source": """
ctx._source.dict = [:];
ctx._source.dict['key1'] = params.key1;
ctx._source.dict['key2'] = params.key2;
""",
"params" : {
"key1" : ["val1", "val2", "val3"],
"key2" : ["val1", "val2", "val3"]
}
},
"upsert" : {}
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您最终都会得到如下文档:
获取/索引/1
{
"dict": {
"key1" : ["val1", "val2", "val3"],
"key2" : ["val1", "val2", "val3"]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5359 次 |
| 最近记录: |