ElasticSearch6.X版本Java Api中文详解(十一)之Terminate After、Search Template解析

Terminate After

为每个碎片收集的最大文档数量,当达到该数量时,查询执行将提前终止。如果设置好了,您将能够通过在SearchResponse对象中请求isTerminateEarly()来检查操作是否提前终止:

SearchResponse sr = client.prepareSearch(INDEX)
    .setTerminateAfter(1000)    
    .get();

if (sr.isTerminatedEarly()) {
    // We finished early
}

Finish after 1000 docs

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)             
    .setRequest(new SearchRequest())              
    .get()                                        
    .getResponse();     
  1. 模板名称
  2. 模板存储在磁盘上的gender_template.mustache中
  3. 参数
  4. 设置执行上下文(例如。在这里定义索引名)
  5. 执行并获取模板响应
  6. 从模板响应中获取搜索响应本身
  • 您还可以将模板存储在集群状态:
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();       
  1. 模板名称
  2. 存储在集群状态中的模板
  3. 参数
  4. 设置执行上下文(例如。在这里定义索引名)
  5. 执行并获取模板响应
  6. 从模板响应中获取搜索响应本身
  • 你也可以执行内联模板:

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();  
  1. 模板名称
  2. 模板内联传递
  3. 参数
  4. 设置执行上下文(例如。在这里定义索引名)
  5. 执行并获取模板响应
  6. 从模板响应中获取搜索响应本身
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注