Scala操作Elasticsearch获取文档时遇GetRequest构造器访问错误
解决Scala中Elasticsearch GetRequest构造函数无法访问的问题
错误原因
Elasticsearch Java客户端的GetRequest类构造函数为包私有,无法直接通过new关键字实例化,必须使用官方推荐的Builder构建器来创建请求对象。
修正后的代码
import co.elastic.clients.elasticsearch.core.{GetRequest, GetResponse} import java.util.concurrent.CompletableFuture class GetIndex { def Getting(): Unit = { val esClient = ElasticSearchConnection.getClient // 使用Builder模式构建GetRequest val request: GetRequest = GetRequest.of(g => g .index("firstindex") .id("1") ) val response: CompletableFuture[GetResponse[User]] = esClient.get(request, classOf[User]) // 同步获取异步结果(生产环境建议用异步回调避免阻塞) println(response.join()) } }
额外说明
- Builder模式的优势:Elasticsearch客户端通过链式调用的Builder模式,支持灵活配置各类请求参数(如路由、版本号等),比直接构造对象更易扩展。
- 异步结果处理:原代码直接打印
CompletableFuture对象只会输出Future实例的引用,需通过join()同步获取结果,或使用whenComplete()添加异步回调处理响应和异常。 - 实体类序列化:确保
Usercase class已正确配置Elasticsearch的序列化支持(如添加Jackson注解、集成Elasticsearch Jackson模块),否则无法将ES文档反序列化为User对象。
内容的提问来源于stack exchange,提问作者Asif khAn
相关产品推荐
相关产品推荐

