通过java API查询elasticsearch的纯字符串模板?
我有一个保存在{ES_HOME}}/config/scripts中的foo.mustache模板 使用以下通过java API查询elasticsearch的纯字符串模板?,java,templates,
elasticsearch,Java,Templates,
elasticsearch,我有一个保存在{ES_HOME}}/config/scripts中的foo.mustache模板 使用以下消息正文发布到返回有效响应: { "template": { "file": "foo" }, "params": { "q": "a", "hasfilters": false } } 既然我已经验证了所有不同组件的工作,我想将其转换为使用JavaAPI。文档介绍了如何在java中执行此操作: SearchResponse sr = client.
消息正文发布到返回有效响应:
{
"template": {
"file": "foo"
},
"params": {
"q": "a",
"hasfilters": false
}
}
既然我已经验证了所有不同组件的工作,我想将其转换为使用JavaAPI。文档介绍了如何在java中执行此操作:
SearchResponse sr = client.prepareSearch("forward")
.setTemplateName("foo")
.setTemplateType(ScriptService.ScriptType.FILE)
.setTemplateParams(template_params)
.get();
但是,我只想发送一个简单的字符串查询(即上面消息体的内容),而不是使用java构建响应。有办法做到这一点吗?我知道对于普通查询,我可以这样构造它:
SearchRequestBuilder response = client.prepareSearch("forward")
.setQuery("""JSON_QUERY_HERE""")
我相信setQuery()方法将内容包装到查询对象中,这不是我想要的模板查询。如果这是不可能的,我将不得不按照文档中的方式将我的json参数转换为Map我最终只是按照文档要求将我的模板参数转换为Map
。我使用groovy的JsonSlurper,用一个非常简单的方法将文本转换为对象
import groovy.json.JsonSlurper
public static Map<String,Object> convertJsonToTemplateParam(String s) {
Object result = new JsonSlurper().parseText(s);
//Manipulate your result if you need to do any additional work here.
//I.e. Programmatically determine value of hasfilters if filters != null
return (Map<String,Object>) result;
}
最后,我只是按照文档要求将模板参数翻译成Map
。我使用groovy的JsonSlurper,用一个非常简单的方法将文本转换为对象
import groovy.json.JsonSlurper
public static Map<String,Object> convertJsonToTemplateParam(String s) {
Object result = new JsonSlurper().parseText(s);
//Manipulate your result if you need to do any additional work here.
//I.e. Programmatically determine value of hasfilters if filters != null
return (Map<String,Object>) result;
}