我需要索引3個級別(或更多)的孩子父母。 例如,關卡可能是作者,書籍和該書中的角色。Elasticsearch更深層次親子關係(孫子)
但是,當索引超過兩級時,has_child和has_parent查詢和過濾器存在問題。 如果我有5個分片,當在最低級別(字符)上運行「has_parent」查詢或在第二級別(書籍)上運行has_child查詢時,我會得到大約五分之一的結果。
我的猜測是,一本書通過它的父母id被索引到一個分片,因此將與他的父母(作者)一起居住,但是一個字符被索引到基於書籍ID的哈希的分片,不一定符合該書索引的實際碎片。
所以,這意味着同一作者的所有書籍的性格不一定在相同的碎片中(真的會削弱整個孩子 - 父母的優勢)。
我做錯了什麼?我如何解決這個問題,因爲我真的需要複雜的查詢,例如「哪些作者用女性角色書寫書籍」。
我狂表示該問題,在一個要點是: https://gist.github.com/eranid/5299628
底線是,如果我有一個映射:
"author" : {
"properties" : {
"name" : {
"type" : "string"
}
}
},
"book" : {
"_parent" : {
"type" : "author"
},
"properties" : {
"title" : {
"type" : "string"
}
}
},
"character" : {
"_parent" : {
"type" : "book"
},
"properties" : {
"name" : {
"type" : "string"
}
}
}
和5個碎片索引,我無法使用「的查詢has_child」和 「has_parent」
查詢:
curl -XPOST 'http://localhost:9200/index1/character/_search?pretty=true' -d '{
"query": {
"bool": {
"must": [
{
"has_parent": {
"parent_type": "book",
"query": {
"match_all": {}
}
}
}
]
}
}
}'
僅返回字符的第五個(大約)。
很酷。我如何指定? – eran
在URL上使用路由參數。請參閱此處的路由部分 - http://www.elasticsearch.org/guide/reference/api/index_/ – imotov
謝謝。我可以在後期數據中以某種方式指定它嗎?專門爲bulk_index,我想爲每個文檔指定路由? – eran