在 Elasticsearch 中使用 ECMAScript(也称为 JavaScript)非常常见,它可以用于编写查询、聚合、脚本和管道等。在 Elasticsearch 7.11 版本中,支持 ECMAScript 2020(ES11)的大部分新功能,这篇文章将会介绍主要的功能和应用场景以及示例代码。
可选链操作符(Optional Chaining)
可选链操作符是一个新的 ECMAScript 中的特性,用于简化在对象链中读取值的判断和处理。在 Elasticsearch 中,当需要访问一个深层嵌套的属性,使用可选链操作符可以让代码更加简洁和高效。
-- -------------------- ---- ------- -- ------ ----- -- -------- - --------- - --------- ------------------ -- ---------------------- -- --- --------- - ----------- - -------- --- - - - -
上面的示例在更新文档的价格时,使用了可选链操作符来访问 params.discount.value
属性的值。如果 params.discount
为 null
或 undefined
,则直接返回 1
。
空值合并操作符(nullish coalescing)
空值合并操作符是另一个新的 ECMAScript 中的特性,用于判断一个值是否为 null
或 undefined
。在 Elasticsearch 中,它可以用于设置默认值或者保证代码的稳定性。
-- -------------------- ---- ------- -- ------ -- - -------- - -------- - ------------ - -- -- ----- - ---- -- --------- ----------- -- ------ ----------------------- -- -- - - -- --------- - -------- - ------------ -- - - -
上面的示例使用了空值合并操作符来设置一个默认值为 10
,当 stats
为 null
或者 pageviews
属性不存在时,则返回默认值。
for-in 循环关键字
for-in 循环关键字可以遍历数组或对象的属性和值。在 Elasticsearch 中,它可以用于聚合操作和管道操作的处理。
-- -------------------- ---- ------- - ------- - -------- - -------- - -------- -------- -- ------- - --------------- - ----------- - -- ----------- ------- -- ------- - --------------- - -------- ------ - - -- -- -- ------ ------------- ------------------ - -------------- ------------ - ---- ------------- ---- ----- -- --------------- ------------------------- ----------------- ------- ------------- ---------------- ------- ------------------------- -- --------------------------------- - - - - - -
上面的示例使用了 for-in 循环关键字来遍历每一本书的属性,将所有属性添加到 state 中。最后返回一个不重复的属性数组。
globalThis 全局对象
globalThis 是一个新的全局对象,代表当前的全局作用域。在 Elasticsearch 中,它可以用于获取全局变量和函数。
// 获取节点的 hostname 和公共 IP { "script": { "source": "return [globalThis.nodeInfo.nodeName, globalThis.nodeInfo.network.publishAddress]", "context": "get", "gates": ["_groovy", "_painless", "_expression"] } }
上面的示例使用了 globalThis 全局对象来获取节点的 hostname 和公共 IP,使用 nodeInfo.nodeName
和 nodeInfo.network.publishAddress
属性可以方便地获取节点信息。
总结
这篇文章介绍了 Elasticsearch 中支持的 ECMAScript 2020(ES11)的主要功能,包括可选链操作符、空值合并操作符、for-in 关键字和 globalThis 全局对象。这些功能可以让代码更加简洁、高效和稳定。希望这篇文章对你学习和应用 ECMAScript 2020 有帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645743a3968c7c53b0a0a355