Безболезненный доступ к значению в ArrayList - PullRequest
0 голосов
/ 19 апреля 2020

Попытка выяснить, как получить доступ к элементу в ArrayList.

У меня есть значения в _source:

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

Поскольку все они дубликаты (из-за неисправного скрипта Grok ), Я хочу избавиться от дубликатов:

Я не могу понять, как получить доступ к значению.

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()

Спасибо

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Общий c способ сделать элементы массива уникальными:

GET index7/_update_by_query
{
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "session_id"
        }
      }
    }
  },
  "script": {
    "inline": """ctx._source.session_id = ctx._source
                                            .session_id
                                            .stream()
                                            .sorted()
                                            .collect(Collectors.toList());
                                            """
  }
}
1 голос
/ 19 апреля 2020

Вы можете использовать _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"
        }
      }
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...