dou*_*yte 9 lucene elasticsearch kibana
在关系数据库上,我有一个通过外键连接的两个表,在一个典型的一对多关系上.我想将此模式转换为ElasticSearch,因此我研究并发现了两个选项:嵌套和父子.我的最终目标是在Kibana 4中可视化这个数据集.
亲子似乎是最合适的,所以我将根据官方的ES文档和我在网上找到的一些例子来描述我遵循的步骤.
curl -XPUT http://server:port/accident_struct -d '
{
"mappings" : {
"event" : {
},
"details": {
"_parent": {
"type": "event"
} ,
"properties" : {
}
}
}
}
';
Run Code Online (Sandbox Code Playgroud)
这里我创建索引accident_struct,它包含两种类型(对应于两个关系表):事件和细节.
事件是父项,因此每个详细文档都有一个与之关联的事件.
然后我使用批量API上传文档.对于活动:
{"index":{"_index":"accident_struct","_type":"event","_id":"17f14c32-53ca-4671-b959-cf47e81cf55c"}}
{values here...}
Run Code Online (Sandbox Code Playgroud)
详情如下:
{"index":{"_index":"accident_struct","_type":"details","_id": "1", "_parent": "039c7e18-a24f-402d-b2c8-e5d36b8ad220" }}
Run Code Online (Sandbox Code Playgroud)
该事件对儿童一无所知,但每个孩子(细节)都需要设置其父母.在ES文档中,我看到使用"parent"设置父级,而在其他示例中,我使用"_parent"看到它.我想知道什么是正确的选择(虽然在这一点上,没有一个适合我).
请求成功完成,我可以看到索引中包含的文档数对应于事件+类型的总和.
在ES上,我也可以向父母询问父母的子女和父母.例如:
curl -XPOST host:port/accident_struct/details/_search?pretty -d '{
"query" : {
"has_parent" : {
"type" : "event",
"query" : {
"match_all" : {}
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
在Kibana上设置索引后,我能够列出父和子的所有字段.但是,如果我转到"发现"选项卡,则仅列出父字段.
如果我取消选中一个显示"隐藏缺失字段"的框,子文档中的字段将显示为灰色,并显示错误消息(请参阅图像)
我做错了什么还是Kibana4不支持亲子?如果它不受支持,代表这种关系的最佳替代方案是什么?
归档时间: |
|
查看次数: |
3732 次 |
最近记录: |