Обновление числовых и плавающих полей в клиенте elasticsearch

#node.js #elasticsearch #client #numeric #update-by-query

#node.js #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
            }
        }
    }
});