es 中使用 painless 脚本

es 中使用 painless 脚本

  • Painless 语法与 Java 类似

相关文章:

访问field

文档的field数据存储在docctx._source 中, 是map类型的。

非text、非nested 的field 存到 doc values 列存储中, IO性能好

假设你有一个字段:”a”: 1。

  • 那么doc[‘a’]返回的是[1],是一个数组。
  • doc[‘a’].value返回的是1,也就是取第一个元素。
  • doc[‘a’].values与doc[‘a’]表现一致,返回[1]。

特殊一点的是object类型的字段,ES底层存储时是key扁平化的,所以你应该直接这样取:

  • doc[‘xxx.yyy’]
  • doc[‘xxx.yyy’].value
  • doc[‘xxx.yyy’].values

在查询中使用

1
2
3
4
5
6
7
8
9
10
11
12
// 查 flag = '00000' 的
GET _search
{
query: {
script: {
script: {
inline: "doc['flag'].value == '00000'",
lang: "painless",
},
},
},
};

更新时使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /_update_by_query
{
"script": {
"inline": "ctx._source.flag = params.flag",
"params": {
flag: '11111'
}
},
"query": {
"script": {
"script": {
"inline": "doc.flag[0].startsWith('0')"
}
}
}
}

删除时使用

1
2
3
4
5
6
7
8
9
10
POST /_delete_by_query
{
"query": {
"script": {
"script": {
"inline": "doc.flag[0].startsWith('0')"
}
}
}
}

 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×