Elasticsearch Java API Client中SearchTemplateRequest的替代方案咨询
Elasticsearch Java API Client 替代 SearchTemplateRequest 实现脚本查询
在Elasticsearch Java API Client中,没有和High Level Client完全一一对应的SearchTemplateRequest类,但可以通过API Client自带的SearchTemplate API实现相同的存储脚本查询功能,以下是迁移后的代码示例及关键说明:
迁移后代码
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.core.SearchTemplateRequest; import co.elastic.clients.elasticsearch.core.SearchTemplateResponse; import co.elastic.clients.elasticsearch.core.search.TrackHits; import co.elastic.clients.elasticsearch._types.Script; import co.elastic.clients.elasticsearch._types.ScriptType; import java.io.IOException; import java.util.Map; public SearchTemplateResponse getScriptResponse(String indexName, String scriptName, Map<String, Object> scriptParams) throws IOException { // 构建SearchTemplate请求 SearchTemplateRequest request = new SearchTemplateRequest.Builder() // 指定查询索引 .index(indexName) // 配置存储脚本:通过脚本ID指定,类型为STORED .script(Script.of(s -> s .id(scriptName) .type(ScriptType.Stored) )) // 传递脚本参数 .params(scriptParams) // 启用trackTotalHits,确保返回准确的总命中数 .searchRequest(sr -> sr .trackTotalHits(TrackHits.of(th -> th.enabled(true))) ) .build(); // 执行请求并返回响应 return getElasticsearchClient().searchTemplate(request); }
关键差异说明
- 包路径变更:原High Level Client的类位于
org.elasticsearch.client.core下,API Client对应类位于co.elastic.clients.elasticsearch.core下 - 构建模式:API Client采用Builder链式调用替代原有的setter方法,代码更简洁易读
- 脚本配置:通过
Script.of()静态方法构建脚本对象,明确指定存储脚本的ID和类型 - TrackTotalHits配置:在
searchRequest()内部通过TrackHits对象启用,替代原有的直接调用trackTotalHits() - 客户端调用:API Client的
ElasticsearchClient直接调用searchTemplate()方法执行请求,无需额外传递RequestOptions.DEFAULT(如需自定义请求选项,可使用重载方法传入)
内容的提问来源于stack exchange,提问作者Chetna Joshi
相关产品推荐
相关产品推荐

