0

我对弹性搜索客户端有点陌生。我没有对任何字段进行任何类型的预定义映射,因为将来我可能会在文档中添加一些新字段。我的数据如下所示:-

{
    "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`
        }
    }
})

由于updatedAtand ,我收到编译错误segmentId,当我作为字符串传递时,它可以工作,例如:-

source:`ctx._source.data='This is updated test data';ctx._source.updatedAt='${Date.now()}';ctx._source.segmentId='null'`
4

1 回答 1

0

我找到了解决上述问题的方法,

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
            }
        }
    }
});
于 2021-04-03T06:53:00.797 回答