1

我在批量更新后使用弹性搜索多获取来阅读文档。它返回一些文档源为空。

 MultiGetRequestBuilder builder = client.prepareMultiGet();

 builder.setRefresh(true);

 builder.add(indexName, type, idsList);

 MultiGetResponse multiResponse = builder.execute().actionGet();

 for (MultiGetItemResponse response : multiResponse.getResponses())
 {
         String customerJson = response.getResponse().getSourceAsString();
         System.out.println("customerJson::" + customerJson);
 }

我的代码有什么问题吗?提前致谢。

4

1 回答 1

1

当您说“某些返回源为空”时,我假设 get 响应将它们标记为不存在..?

如果是这样的话,那么也许:

  1. 由于映射/随机错误,批量中的一些索引请求失败。

  2. 您需要在 indexation 和 multiget 之间刷新索引(即:您的文档尚不可用于搜索)

    transportClient.admin().indices().prepareRefresh(index).execute();

祝你好运

编辑:您在评论中回答了您自己的问题,但为了便于阅读:使用 get 或 multiget 时,如果在索引时使用了路由键,则必须在 get 期间再次指定它,否则,使用默认路由确定错误的分片并且获取失败。

于 2013-08-27T13:17:47.067 回答