0

我正在使用prepareDelete查询,BulkRequest其中我有一组我必须删除的 ID。

我用了:

BulkRequestBuilder bulkRequest = searchClient.prepareBulk();
for id in ids {
    bulkRequest.add(searchClient.prepareDelete("indexName", "childType", id));
}
BulkResponse bulkResponse = bulkRequest.execute().actionGet();

这种删除结构在 ES 2.2.0 中有效,但在 ES 2.3.0 中我得到RoutingMissingException.

如果我打印bilkResponse.buildFailureMessage()并且我得到

[0]: index [indexName], type [childType], id [215f3228a3c53970883ae0d3b22dae6f], message [[indexName] RoutingMissingException[routing is required for [indexName]/[childType]/[215f3228a3c53970883ae0d3b22dae6f]]]

我什至没有更改现有索引的设置/映射。

可能是什么原因?

4

2 回答 2

0

@rahulroc 是对的。我正在添加一个按时间顺序排列的对引入此功能的问题的引用列表:

  1. 不要向所有分片广播删除(2014)
  2. 删除 api:如果需要时缺少路由,则删除广播删除(2015)
  3. 批量 api:需要路由但未指定时删除失败(2016)

也许更新 3 是使异常出现在es-2.3.0. 因此,您可以只使用has_child 查询从子文档 ID 中获取父级。

于 2016-04-05T17:55:11.350 回答
0

似乎是与此处回答的问题类似的问题

引用完成的答案

当您有父子关系时,每次尝试访问子节点时都需要在 URL 中指定父节点,因为路由现在取决于父节点。

在您的示例中,您想尝试:

curl -XDELETE http://localhost:9200/indexName/childType/215f3228a3c53970883ae0d3b22dae6f?parent=[parent_id]

这也可能对您有所帮助。删除子文档

于 2016-03-31T07:38:33.937 回答