删除父节点不正确的操作仍然成功



在Elasticsearch中,我为文档类型(我们称之为homes)定义了一个_parent映射,并索引了一些文档。它们似乎正确索引,因为当我搜索匹配某些条件(使用has_child)的孩子的父母时,返回预期的结果。

"问题"是,当我为子对象发出删除时,如…

curl -XDELETE 'http://localhost:9200/test/homes/1?parent=11'

即使id为1homes文档的父文档不是11,它也会成功。

这是预期的行为吗?

根据我对Elasticsearch删除API文档的理解,在这种情况下,文档不必被删除(但这不是我所看到的)…

可以设置父参数,基本与设置routing参数

在没有正确路由的情况下发出删除,将导致文档不能删除

路由(以及父节点)决定使用哪个分片。在ES 1.0中,DB知道需要父节点,但仍然只使用它来决定在哪里查找。如果对象存在,它将被删除,但是父对象是否是"真正的父对象"并不重要。重要的是父节点的哈希结果相同。

您可以使用父键或幻想键完美地创建冲突数据(在不同的分片上相同的索引/类型/id)—您拥有的分片越多,就越不可能发生冲突,但这并不能使其安全。只要记住:不是外键,也不是SQL中的强键。

最新更新