2017-01-17 3 views
3

Я использую следующий код, чтобы обновить документ в elasticsearchScripted динамическое обновление не работает в ElasticSearch

client.update({ 
    index: 'myindex', 
    type: 'mytype', 
    id: '1', 
    body: { 
    script: 'ctx._source.tags += tag', 
    params: { tag: 'some new tag' } 
    } 
}, function (error, response) { 

}); 

Однако, это вызывает ошибку компиляции. Когда я заменяю тег на params.tag выше, он добавляет нуль в текущее поле, то есть идентифицирует params.tag как null.

ответ

0

Я столкнулся с подобной путаницей. This document делится примером, который у вас есть в вашем вопросе. С другой стороны, this document разделяет другой пример (который я должен работать).

Ваше заявление обновление будет что-то вроде этого:

client.update({ 
    index: 'myindex', 
    type: 'mytype', 
    id: '1', 
    body: { 
     script: { 
      inline: 'ctx._source.tags.add(params.tag)', 
      lang: 'painless', 
      params: { 
       tag: 'some new tag' 
      } 
     } 
    } 
}, function (error, response) { 
    // handling of error/response 
}); 

** Обратите внимание на .add вместо += для случая, когда при добавлении в массив.

Смежные вопросы