Elasticsearch: получить индекс объекта с помощью безболезненного скрипта

У меня есть вложенный тип, и мне нужно получить индекс определенного объекта для выполнения обновления:

{
  "_index": "asset_en_v1",
  "_type": "note",
  "_id": "23217",
  "_version": 24,
  "found": true,
  "_source": {
    "user_id": "11",
    "title": "Title",
    "note": "Note.",
    "creation": "2017-05-31T21:36:01",
    "modification": "2017-05-31T21:36:01",
    "links": [
      {
        "note_link_id": "7310",
        "user_id": "11",
        "creation": "2017-06-01T14:41:50",
        "modification": "2019-06-01T14:42:00",
        "comment": "Comment goes here."
      },
      {
        "note_link_id": "7311",
        "user_id": "11",
        "creation": "2017-06-01T14:42:42",
        "modification": "2019-06-01T14:42:00",
        "comment": "Yep..."
      },
      {
        "note_link_id": "7312",
        "user_id": "11",
        "creation": "2017-06-01T15:33:55",
        "modification": "2017-06-01T15:34:00",
        "comment": "Jumo."
      }
    ]
  }
}

До сих пор я создал оператор _update в скрипте Painless, который почти выполняет свою работу, но я изо всех сил пытаюсь найти соответствие:

{
    "script": {
        "lang": "painless",
        "inline": "def note_link_id = 7311; def links = ctx._source.links; for (int i = 0; i < links.length; ++i) { if (links[i].note_link_id == note_link_id) { ctx._source.links[note_link_id].comment = params.comment; ctx._source.links[note_link_id].modification = params.modification } }",
        "params": {
            "modification": "2019-06-01T14:42:00",
            "comment": "QWERTY!"
        }
    }
}

Здесь links[i].note_link_id == note_link_id не соответствует.

Любые идеи?


person Wayne Smallman    schedule 02.06.2017    source источник


Ответы (1)


В вашем встроенном скрипте это должно было быть i++ вместо ++i

def note_link_id = 7311; 
def links = ctx._source.links; 
for (int i = 0; i < links.length; i++) //Note i++, instead of ++i
{ 
    if (links[i].note_link_id == note_link_id) 
    { 
        ctx._source.links[note_link_id].comment = params.comment;
        ctx._source.links[note_link_id].modification = params.modification 
    } 
}
person Sunil Purushothaman    schedule 04.01.2018
comment
Сунил, спасибо за предложение. В конце концов, мне пришлось использовать другую технику, и я не в состоянии внести изменения, чтобы проверить, сработает ли ваша идея или нет. Но если я вернусь к этому вопросу в будущем, я буду иметь это в виду. - person Wayne Smallman; 04.01.2018
comment
С тех пор я использовал этот код для своих целей и нашел его правильным, хотя конечный результат немного отличался от целей @WayneSmallman, как вы можете видеть здесь: stackoverflow.com/questions/67126622/ - person Jarede; 18.04.2021