ES脚本查询
脚本的CRUD
// 使用painless脚本向tags添加元素
POST product/_update/6vO5n5UBPBZCwrPtlmeQ
{
"script": {
"lang": "painless", // 可以省略
"source": "ctx._source.tags.add('60Hz')"
}
}
// 删除数据
POST product/_update/6vO5n5UBPBZCwrPtlmeQ
{
"script": {
"source": "ctx.op='delete'"
}
}
// upsert示例
POST product/_update/6vO5n5UBPBZCwrPtlmeQ
{
"script": {
"source": "ctx._source.price -= 100"
},
"upsert": {
"name": "iPhone 15",
"desc": "苹果公司推出的新一代智能手机,搭载A16芯片,性能流畅,系统稳定,拍照效果出色。",
"price": 6999,
"lv": "中高端",
"type": "手机",
"create_time": "2024-09-15",
"tags": [
"苹果",
"中高端手机",
"性能稳定"
]
}
}
// 查询时对数据进行计算
GET product/_search
{
"script_fields": {
"discount_price": {
"script": {
"source": "doc['price'].value * 0.9"
}
}
}
}
参数化脚本
// 使用参数
POST product/_update/6vO5n5UBPBZCwrPtlmeQ
{
"script": {
"source": "ctx._source.tags.add(params.tag_name)",
"params": {
"tag_name": "60Hz"
}
}
}
// 多参数输出
GET product/_search
{
"script_fields": {
"discount_price": {
"script": {
"source": """[
doc['price'].value * params.discount1,
doc['price'].value * params.discount2,
doc['price'].value * params.discount3
]
""",
"params": {
"discount1": 0.9,
"discount2": 0.7,
"discount3": 0.5
}
}
}
}
}