Итак, я настроил индекс со следующим отображением:
PUT test_index
{
"mappings": {
"doc": {
"properties": {
"title": {
"type": "text"
},
"author": {
"type": "text"
},
"reader_stats": {
"type": "join",
"relations": {
"book": "reader"
}
}
}
}
}
}
каждый родительский документ представляет книгу, а его дочерние элементы представляют читателя этой книги.Однако, если бы мне нужно было выполнить:
GET test_index/_search
{
"query":{"match_all":{}}
}
Результаты будут заполнены как книгами, так и читателями, например так:
"hits" : [
{
"_index" : "test_index",
"_type" : "doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"title" : "my second book",
"author" : "mr author",
"reader_stats" : {
"name" : "book"
}
}
},
{
"_index" : "test_index",
"_type" : "doc",
"_id" : "7",
"_score" : 1.0,
"_routing" : "2",
"_source" : {
"name" : "michael bookworm",
"clicks" : 1,
"reader_stats" : {
"name" : "reader",
"parent" : 2
}
}
}
]
Есть ли способ исключить документы читателя и толькопоказать книги?Я уже использовал match_all в своем приложении для захвата книг, так что было бы хорошо, если бы я мог избежать необходимости изменять этот запрос, но я полагаю, что это невозможно.
Также я немного запутался относительно того, как сопоставления работают собъединить поля, так как нет определения того, какие поля требуются от дочерних документов.Например, в моем отображении нигде не указано, что документы «для чтения» должны иметь поля «имя» и «клики».Это правильно?