在Elasticsearch中,我爲文檔類型定義了一個_parent
映射(我們稱之爲homes
),並對一些文檔編制索引。他們似乎正確索引,因爲當我尋找父母與孩子符合一些條件(使用has_child
)預期的結果返回。刪除不正確的父項仍然成功
「問題」是,當我發出了一個刪除一個孩子一樣......
curl -XDELETE 'http://localhost:9200/test/homes/1?parent=11'
它成功即使homes
文檔ID爲1
的父母是不是11
。
這是預期的行爲?
從我的Elasticsearch delete API docs文件的理解也不會在這種情況下被刪除(但是這不是我所看到的)...
家長可以設置參數,這將主要是與設置
routing
參數的 相同。...
發出刪除不正確的路由,會導致文檔 不會被刪除。
如果父母(另一個孩子)的ID爲「11」,這將是一個合理的解釋,但即使沒有這樣的父母也會發生這種情況。 – Xavi
家長只需要將孩子存儲在同一個分片上。 ES並不能保護你免於在父母的腳下射擊(還沒有調查到1.0)。如果你通過父節點(或者甚至沒有),它將被用於路由,如果路由偶然在同一個分片上結束,那麼你會刪除你的對象。反過來也是如此 - 您可以在不同的分片中爲不同的父母編制相同的對象(相同的ID)。 ES中的父母關係非常脆弱,遲早會得到你。 – cfrick
據我所知,即使指定的父母不是正確的父母,如果碰巧與不正確的父母在相同的分片中,該文檔也會被刪除。然而,父'11'不存在(沒有那個id的文檔),所以應該返回一個錯誤,並且不應該刪除該子項? (即使ES親子關係很弱) – Xavi