【发布时间】:2022-01-05 04:27:04
【问题描述】:
在我们的应用中,我们正在将一些数据同步到elasticsearch,其中一些数据是用户的记录。该应用程序是 grails 5.1,我们使用 Elasticsearch Java API Client 进行弹性搜索集成。
现在,我们有以下函数,假设通过他们的 id 获取用户列表:
PublicUser[] getAllByIds(Long[] ids) {
MgetRequest request = new MgetRequest.Builder()
.ids(ids.collect { it.toString() }.toList())
.index("users")
.build()
MgetResponse<PublicUser> response = elasticSearchClientProviderService.getClient().mget(
request,
PublicUser.class
)
response.docs().collect {
it.result().source()
}
}
当响应包含至少一个用户记录时,我们将获得PulicUser 对象的列表 -> 如预期的那样。
但是,如果搜索结果为空,则此函数最终返回的是一个包含一个 null 元素的列表。
一些调查
response.docs() 保存一个不存在的文档(看起来这个文档中填充了请求数据)。
因此,这个函数的返回结果是(正如我上面提到的)一个null 元素的列表。
另一个观察结果:
我预计响应对象将具有.hits(),因为可以通过response.hits().hits() 访问实际结果。但现在已经存在了。
我开始直接研究docs() 的唯一一季是因为如果这个文档:https://www.elastic.co/guide/en/elasticsearch/reference/master/docs-multi-get.html
缺少Elasticsearch Java API Client 文档。它们主要参考 REST API 文档。
从mget 请求中获取结果列表的正确方法是什么?
【问题讨论】:
标签: elasticsearch elasticsearch-java-api