Sun*_*man 5 compilation elasticsearch kibana elasticsearch-5 elasticsearch-painless
我们在项目中使用了许多ScriptQuery和ScriptField ,并以轻松的语言为它们提供了内联脚本。
我的问题是,我们如何验证这些轻松的脚本?换句话说,如何确保它们能够编译?
我们今天使用的方法是通过 Kibana 在本地测试它们。然而,这是手动的,容易出错且不可扩展。我正在寻找一种编程方式或实用程序来验证无痛脚本,以便我可以将其插入 CI/CD 管道中。Elasticsearch 底层使用的编译器是开源的吗?或者还有其他办法吗?
Elasticsearch 版本 5.4
Kibana 中的示例查询,带有用于 ScriptField 和 ScriptQuery 的 Painless 脚本
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"
}
}
}
}
]
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
集成测试可以在本地计算机上启动Elasticsearch节点,然后向其发送请求。Embedded -elasticsearch库可以方便地下载指定的 Elasticsearch 版本并在单独的进程中启动它。
embeddedElastic = EmbeddedElastic.builder()
.withElasticVersion(Version.CURRENT.number())
.withSetting(PopularProperties.CLUSTER_NAME, CLUSTER_NAME)
.withSetting(PopularProperties.TRANSPORT_TCP_PORT, transportTcpPort)
.withIndex(INDEX_NAME, IndexSettings.builder()
.withSettings(getClass().getResourceAsStream("settings-mappings.json"))
.build())
.build()
.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7978 次 |
| 最近记录: |