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