- Dependency
- Client
- Client - Transport Client
- Client - XPack Transport Client
- Document APIs
- Document APIs - Index API
- Document APIs - Get API
- Document APIs - Delete API
- Document APIs - Delete By Query API
- Document APIs - Update API
- Document APIs - Multi Get API
- Document APIs - Bulk API
- Document APIs - Using Bulk Processor
- Search API
- Search API - Using scrolls in Java
- Search API - MultiSearch API
- Search API - Using Aggregations
- Search API - Terminate After
- Search API - Search Template
- Aggregations
- Aggregations - Structuring aggregations
- Aggregations - Metrics aggregations
- Aggregations - Bucket aggregations
- Query DSL
- Query DSL - Match All Query
- Query DSL - Full text queries
- Query DSL - Term level queries
- Query DSL - Compound queries
- Query DSL - Joining queries
- Query DSL - Geo queries
- Query DSL - Specialized queries
- Query DSL - Span queries
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Search API - Search Template
Search Template
首先查看 Search Template 文档
/_search/template endpoint 允许我们在执行搜索请求和使用模板参数填充现有模板之前,能够使用
mustache
语言预先呈现搜索请求。
将模板参数定义为 Map <String,Object>
:
Map<String, Object> template_params = new HashMap<>();
template_params.put("param_gender", "male");
可以在config/scripts
中使用存储的 search templates
。 例如,有一个名为 config/scripts/template_gender.mustache
的文件,其中包含:
{
"query" : {
"match" : {
"gender" : "{{param_gender}}"
}
}
}
创建search templates
请求:
SearchResponse sr = new SearchTemplateRequestBuilder(client)
.setScript("template_gender") //template 名
.setScriptType(ScriptService.ScriptType.FILE) //template 存储在 gender_template.mustache 磁盘上
.setScriptParams(template_params) //参数
.setRequest(new SearchRequest()) //设置执行的context(ie: 这里定义索引名称)
.get()
.getResponse();
还可以将 template
存储在 cluster state
中:
cluster state是全局性信息, 包含了整个群集中所有分片的元信息(规则, 位置, 大小等信息), 并保持每个每节的信息同步。 参考: 《为什么ElasticSearch应用开发者需要了解cluster state》
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
执行一个存储的 templates
:
SearchResponse sr = new SearchTemplateRequestBuilder(client)
.setScript("template_gender") //template 名
.setScriptType(ScriptType.STORED) //template 存储在 cluster state 上
.setScriptParams(template_params) //参数
.setRequest(new SearchRequest()) //设置执行的context(ie: 这里定义索引名称)
.get() //执行获取template 请求
.getResponse();
也可以执行 内联(inline
) templates
:
sr = new SearchTemplateRequestBuilder(client)
.setScript("{\n" + //template 名
" \"query\" : {\n" +
" \"match\" : {\n" +
" \"gender\" : \"{{param_gender}}\"\n" +
" }\n" +
" }\n" +
"}")
.setScriptType(ScriptType.INLINE) //template 是内联传递的
.setScriptParams(template_params) //参数
.setRequest(new SearchRequest()) //设置执行的context(ie: 这里定义索引名称)
.get() //执行获取template 请求
.getResponse();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论