В реляционной БД у меня есть две таблицы, связанные внешним ключом, с типичным отношением «один ко многим». Я хотел бы перевести эту схему в ElasticSearch, поэтому я исследовал и нашел два варианта: nested и parent-child. Моя конечная цель состояла в том, чтобы визуализировать этот набор данных в Kibana 4.Могу ли я использовать отношения родитель-ребенок в Кибане?
Родительский ребенок казался наиболее подходящим, поэтому я опишу шаги, которые я выполнил, основываясь на официальном и нескольких примерах, которые я нашел в Интернете ,
curl -XPUT http://server:port/accident_struct -d '
{
"mappings" : {
"event" : {
},
"details": {
"_parent": {
"type": "event"
} ,
"properties" : {
}
}
}
}
';
здесь создать индекс accident_struct, который содержит два типа (соответствующих два реляционных таблиц): события и деталь.
Событие является родительским, поэтому каждый документ детали имеет связанное с ним событие.
Затем я загружаю документы, используя массовый API. Для проведения:
{"index":{"_index":"accident_struct","_type":"event","_id":"17f14c32-53ca-4671-b959-cf47e81cf55c"}}
{values here...}
И детали:
{"index":{"_index":"accident_struct","_type":"details","_id": "1", "_parent": "039c7e18-a24f-402d-b2c8-e5d36b8ad220" }}
Событие ничего о детях не знаю, но у каждого ребенка (детали) необходимо установить его родителей. В документации ES я вижу, что родительский объект задан с использованием «parent», а в других примерах я вижу его с помощью «_parent». Интересно, какой правильный вариант (хотя на данный момент ни один не работает для меня).
Запросы успешно завершены, и я вижу, что количество документов, содержащихся в индексе, соответствует сумме событий + типов.
Я также могу запросить родителей для детей и детей для родителей, на ES. Например:
curl -XPOST host:port/accident_struct/details/_search?pretty -d '{
"query" : {
"has_parent" : {
"type" : "event",
"query" : {
"match_all" : {}
}
}
}
}'
После установки индекса на Kibana, я могу перечислить все поля из родителей и ребенка. Однако, если я перейду на вкладку «открыть», будут указаны только родительские поля.
Если я снимите коробку с надписью «скрыть отсутствующие поля», поля из дочерних документов отображаются в виде серым цветом, наряду с сообщением об ошибке (см рисунок)
Могу ли я делать что-то не так или родитель-ребенок не поддерживается в Kibana4? И если это не поддерживается, какова будет лучшая альтернатива для представления этого типа отношений?