【问题标题】:How to create dictionary object and add data to it in painless elastic search如何在无痛弹性搜索中创建字典对象并向其添加数据
【发布时间】:2019-10-02 07:00:54
【问题描述】:

我想写一个简单的脚本,它应该返回一个字典。 基本上,如果我将它与 java 联系起来,我想要 Dictionary 的输出。

所以,我需要轻松地声明一个 Map 和 List。 另外,我需要向其中添加数据(例如 map.add())

我可以举个例子,你将如何声明一个地图并向其中添加数据?

[painless] (https://www.elastic.co/guide/en/elasticsearch/painless/6.7/painless-examples.html) 中的示例并未涵盖此内容。

我使用的是 v6.7

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation elasticsearch-painless


    【解决方案1】:

    你可以这样做:

    使用空字典创建文档

    PUT index/1
    {
      "dict": {}
    }
    

    更新文档以在参数中填充字典

    POST index/_update/1
    {
        "script" : {
            "source": "ctx._source.dict.putAll(params)",
            "lang": "painless",
            "params" : {
                "key1": ["val1", "val2", "val3"],
                "key2": ["val4", "val5"]
            }
        }
    }
    

    您还可以使用脚本从头开始索引文档(使用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" : {}
    }
    

    在这两种情况下,您最终都会得到这样的文档:

    GET /index/1

    {
      "dict": {
          "key1" : ["val1", "val2", "val3"],
          "key2" : ["val1", "val2", "val3"]
      }
    }
    

    【讨论】:

    • 这似乎是要求的一个很好的解决方法,但我一度陷入困境。早些时候我想写一个 _search api 并输出所需的结果。但是现在,如果我必须编写一个更新 api,我怎么可能查询索引 A 和文档 A1 并将结果更新到索引 B 文档 B1?如果我在 url 中提到索引名称(A),我如何更新索引(B)中的文档?
    • 你需要做两个请求
    • 我发现这些文档很有帮助:elastic.co/guide/en/elasticsearch/painless/master/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2013-08-30
    • 2022-06-19
    相关资源
    最近更新 更多