模版查询

查看 Search Template 文档。

将模版参数定义成 Map<String,Object> 类型:

Map<String, Object> template_params = new HashMap<>();
template_params.put("param_gender", "male");

可以将模版存储在 config/scripts 目录下。如果你的脚本在 config/scripts/template_gender.mustache ,则可以这样查询:

{
    "query" : {
        "match" : {
            "gender" : "{{param_gender}}"
        }
    }
}

创建你的模版查询请求:

SearchResponse sr = new SearchTemplateRequestBuilder(client)
    //模版名
    .setScript("template_gender")
    //模版存储的位置是本地文件
    .setScriptType(ScriptService.ScriptType.FILE)
    //模版参数
    .setScriptParams(template_params)
    //设置请求(可以在这里定义index)
    .setRequest(new SearchRequest())
    //执行并返回查询响应
    .get()
    //从响应中获取查询结果
    .getResponse();

你也可以将模版存储在集群中:

client.admin().cluster().preparePutStoredScript()
    .setScriptLang("mustache")
    .setId("template_gender")
    .setSource(new BytesArray(
        "{\n" +
        "    \"query\" : {\n" +
        "        \"match\" : {\n" +
        "            \"gender\" : \"{{param_gender}}\"\n" +
        "        }\n" +
        "    }\n" +
        "}")).get();

要执行存储在集群中的模版,需要使用 ScriptService.ScriptType.STORED 类型:

SearchResponse sr = new SearchTemplateRequestBuilder(client)
        .setScript("template_gender")
        //模版存储的位置是集群
        .setScriptType(ScriptType.STORED)
        .setScriptParams(template_params)
        .setRequest(new SearchRequest())
        .get()
        .getResponse();

也可以使用内联模版:

sr = new SearchTemplateRequestBuilder(client)
        .setScript("{\n" +
                "        \"query\" : {\n" +
                "            \"match\" : {\n" +
                "                \"gender\" : \"{{param_gender}}\"\n" +
                "            }\n" +
                "        }\n" +
                "}")
        //设置模版类型是内联模版
        .setScriptType(ScriptType.INLINE)
        .setScriptParams(template_params)
        .setRequest(new SearchRequest())
        .get()
        .getResponse();