Обновить числовые и плавающие поля в клиенте elasticsearch
Я немного новичок в клиенте elasticsearch . Я не выполнял никаких предопределенных сопоставлений с каким-либо полем, потому что в будущем я могу добавить новое поле в документы. Мои данные выглядят так: -
{
"segmentId": "4700-b70e-881",
"segmentName": "test",
"data": "This is a test data",
"dataId": "70897e86-9d69-4700-b70e-881a7f74e9f9",
"augmented": false,
"createdBy": {
"email": "2010abinas@gmail.com",
"primaryKey": "902d2b57-54e6",
"secondaryKey": "adcc-f20423822c93"
},
"status": "active",
"createdAt": 1617422043554,
"updatedAt": 1617422043554
}
Я хотел обновить 3 поля, используя
updateByQuery
. Я пробовал подход ниже.
await esClient.updateByQuery({
index: "data",
type: "doc",
refresh: true,
body:{
query:{
match: {
dataId: "70897e86-9d69-4700-b70e-881a7f74e9f9"
}
},
script:{
lang:"painless",
source:`ctx._source.data='This is updated test data';ctx._source.updatedAt=${Date.now()};ctx._source.segmentId=null`
}
}
})
Я получаю ошибку компиляции из-за
updatedAt
а также
segmentId
, Когда я передаю строку, она работает, например: -
source:`ctx._source.data='This is updated test data';ctx._source.updatedAt='${Date.now()}';ctx._source.segmentId='null'`
Кто-нибудь, пожалуйста, помогите мне здесь, что мне не хватает, это было бы очень полезно.
Спасибо :)
1 ответ
Я нашел способ решить указанную выше проблему,
await esClient.updateByQuery({
index: "data",
type: "doc",
refresh: true,
body:{
query:{
match: {
dataId: "70897e86-9d69-4700-b70e-881a7f74e9f9"
}
},
script:{
lang:"painless",
source:`ctx._source.data='This is updated test data';ctx._source.updatedAt=params.date;ctx._source.segmentId=params.segmentId`,
params:{
date: Date.now(),
segmentId: null
}
}
}
});