我無法調試父子關係查詢。我想知道調試問題的方法,而不是簡單地發佈我的映射,數據,查詢和詢問有什麼不對(但我保留最終這樣做的權利!)。是否可以找到文檔所在的elasticsearch分片?
爲此,一開始將檢查我的孩子和相關父母是否在同一個分片上。我不相信我的映射,並且我不想計算文檔理論上在哪個分片上,使用shard = hash(路由)%number_of_primary_shards。我想要一個返回確定答案的查詢。
我無法調試父子關係查詢。我想知道調試問題的方法,而不是簡單地發佈我的映射,數據,查詢和詢問有什麼不對(但我保留最終這樣做的權利!)。是否可以找到文檔所在的elasticsearch分片?
爲此,一開始將檢查我的孩子和相關父母是否在同一個分片上。我不相信我的映射,並且我不想計算文檔理論上在哪個分片上,使用shard = hash(路由)%number_of_primary_shards。我想要一個返回確定答案的查詢。
在您的查詢中,您可以啓用解釋標誌,它會告訴您每個文檔來自哪個分片和節點。 你可以找到一個簡單的查詢如下 -
{
"explain": true,
"query": {
"match_all": {}
}
}
隨着docID的,索引名和類型名,它也會發出節點ID和碎片ID。
你可以找到使用說明API here的樣本。
要進行調試,您不必檢查分片和節點標識符。
您所要做的就是確保子文檔的_parent
和/或_routing
字段與父文檔的id
匹配。使用/_search?pretty&fields=_parent,_routing&_source=true
來顯示這些字段。
要查找的文檔與特定_routing
或_parent
ID只使用/_search?pretty&fields=_parent,_routing&_source=true&q=id:123 OR _routing:123 OR _parent:123
這將找到父文檔和子文檔。
唉,一切看起來都很好,這就是爲什麼我試圖檢查任何東西別的,我可以。孩子有一個_routing字段和父母的_id。孩子_source有父母_id的父母字段。索引映射具有使用_parent類型定義的子節點,需要路由,並且將路徑設置爲parentid,如同子節點_source中一樣。 has_parent查詢在以前版本的elasticsearch中工作,但現在在1.4.4中失敗。我會在幾個小時內將它作爲一個新問題發佈,並通知您。我錯過了編譯器和調試器。謝謝你的幫助。 –
如果您爲此發佈了映射和查詢,這將有所幫助。 – johno
在一個單獨的問題達成一致,但在這裏我的興趣是:_我想知道調試問題的方法,而不是簡單地張貼我的映射......_ –
謝謝,'解釋'是我正在尋找。你的json與elasticsearch文檔一致 - 沒有路由,端點,查詢字符串,動詞 - 作爲n00b這使我瘋狂!我已經弄明白了,但在刪除文件之前並沒有。據推測,這些東西在你的經驗水平上毫無意義。這是我用的:curl -XGET'http:// localhost:9200/myindex/_search?q = _id:xxxxxxxxxxxxxxxxxxxx&explain&pretty'' –