【问题标题】:How to correctly get the results from MgetResponse object?如何正确获取 MgetResponse 对象的结果?
【发布时间】: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


    【解决方案1】:

    目前,我正在通过以下方式解决此问题。不过,很高兴看看是否有更好的方法。

    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
            )
    
    
            List<PublicUser> users = []
            response.docs().each {
                if (it.result().found()) {
                    users.add(it.result().source())
                }
            }
    
            users
        }
    

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2018-11-25
      • 2019-09-08
      • 2017-03-10
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2016-07-07
      • 2021-02-07
      相关资源
      最近更新 更多