尝试找出如何访问ArrayList中的项目。

我在_source中有值:

  "session_id" : [
    "19a7ec8d",
    "19a7ec8d"
  ],

由于它们都是重复项(由于错误的Grok脚本),我想摆脱重复项:

我无法锻炼如何获取值(value)。
String old = ctx._source.session_id[0];
ctx._source.remove(\"session_id\");
ctx._source.session_id = old;

我也尝试过:
String old = ctx._source.session_id.get(0);

String old = ctx._source.session_id.get(0).value()

String old = ctx._source.session_id[0].value()

String old = ctx._source.session_id.get(0).toString()

谢谢

最佳答案

您可以使用_update_by_query

数据:

"hits" : [
      {
        "_index" : "index7",
        "_type" : "_doc",
        "_id" : "zQPYkXEB9JyZpSui0FLw",
        "_score" : 1.0,
        "_source" : {
          "session_id" : [
            "19a7ec8d",
            "19a7ec8d"
          ]
        }
      }
    ]

查询:
POST index7/_update_by_query
{
  "script":{
    "source":"if(ctx._source.session_id instanceof List && ctx._source.session_id.size()>0) { def firstValue=ctx._source.session_id[0];ctx._source.session_id=firstValue;}"
  },
  "query":{
    "match_all":{}
  }
}

结果:
"hits" : [
      {
        "_index" : "index7",
        "_type" : "_doc",
        "_id" : "zQPYkXEB9JyZpSui0FLw",
        "_score" : 1.0,
        "_source" : {
          "session_id" : "19a7ec8d"
        }
      }
    ]

关于elasticsearch - 无痛地访问ArrayList中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61301494/

10-11 22:04