我可以在Kibana上使用亲子关系吗?

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不支持亲子?如果它不受支持,代表这种关系的最佳替代方案是什么?

Sco*_*ott 5

根据弹性网站上的讨论中的评论,P/C与嵌套对象一样,至少在可视化中不受支持.叹了口气.