我们在项目中使用了许多ScriptQuery和ScriptField,并以轻松的语言为它们提供了内联脚本。
我的问题是,我们如何验证这些无痛脚本?换句话说,如何确保它们能够编译?
我们今天使用的方法是通过Kibana在本地测试它们。然而,这是手动的,容易出错,而且不可扩展。我正在寻找一种编程的方法或实用程序来验证无痛脚本,这样我就可以将其插入CI/CD管道。Elasticsearch在幕后使用的编译器是开源的吗?或者有其他方法吗?
ElasticSearch5.4版
Kibana中的示例查询,其中包含用于ScriptField和ScriptQuery的轻松脚本
GET myIndex/_search
{
"script_fields": {
"LastName": {
"script": {
"inline": "if(doc['Author']!= null && doc['Author'].value != null){return doc['Author'].value.toUpperCase();}return null;",
"lang": "painless"
}
}
},
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"script": {
"script": {
"inline": "def lastName = '';if(doc['Author']!= null && doc['Author'].value != null){lastName = doc['Author'].value.toUpperCase();}if(doc.containsKey('LastName') && doc['LastName']!= null && doc['LastName'].value != null){lastName = doc['LastName'].value;}return (lastName.toLowerCase().startsWith(params.SearchParam.toLowerCase()));",
"lang": "painless",
"params": {
"SearchParam": "d"
}
}
}
}
]
}
}
]
}
}
}
3条答案
按热度按时间lsmepo6l1#
集成测试可以启动本地计算机上的Elasticsearch节点,然后向其发送请求。embedded-elasticsearch库可以方便地下载指定的Elasticsearch版本,并在单独的进程中启动它。
wj8zmpe12#
elasticserach支持开发工具来验证脚本,通过使用这个工具,你可以编译脚本,如果它没有编译,它会显示你验证错误。
https://www.elastic.co/guide/en/kibana/current/devtools-kibana.html
eh57zj3b3#
Elasticsearch现在为此公开了一个Painless execute API:
无痛执行API运行脚本并返回结果。
使用此API构建和测试脚本,例如在为运行时字段定义脚本时。
API在8.5版本中处于技术预览状态。请参见此处了解相关的Opensearch API docs。