elasticsearch,Java,Templates,elasticsearch" /> elasticsearch,Java,Templates,elasticsearch" />

通过java API查询elasticsearch的纯字符串模板?

通过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.

我有一个保存在{ES_HOME}}/config/scripts中的foo.mustache模板

使用以下
消息正文发布到返回有效响应:

{
  "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;
}