Мне нужно индексировать 3 уровня (или более) дочернего родителя. Например, уровни могут быть автором, книгой и персонажами из этой книги.
Однако при индексировании более двух уровней возникает проблема с has_child и has_parent запросами и фильтрами. Если у меня есть 5 осколков, я получаю около одной пятой результатов при запуске запроса "has_parent" на самом низком уровне (символы) или запрос has_child на втором уровне (книги).
Моя догадка заключается в том, что книга индексируется осколком по его родительскому идентификатору и поэтому будет находиться вместе со своим родителем (автором), но персонаж индексируется на осколок, основанный на хеше идентификатора книги, что не обязательно соответствует фактическому осколку, на который была проиндексирована книга.
Итак, это означает, что все персонажи книг того же автора не обязательно находятся в одном и том же осколке (например, на самом деле вредит всему преимуществу ребенка-родителя).
Я что-то делаю неправильно? Как я могу это решить, так как мне действительно нужны сложные запросы, такие как "то, что авторы писали с женскими персонажами".
Я сумасшедший, показывающий проблему, на: 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": {}
}
}
}
]
}
}
}'
возвращает только пятую (приблизительно) из символов.