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

时间:2015-06-29 13:27:36

标签: elasticsearch lucene kibana

在关系数据库上,我有一个由外键连接的表,在一个典型的一对多关系上。我想将此架构转换为ElasticSearch,因此我研究并找到了两个选项:nestedparent-child。我的最终目标是在Kibana 4中可视化这个数据集。

亲子似乎是最合适的,所以我将根据官方ES documentation和我在网上找到的一些例子来描述我所遵循的步骤。

 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上设置索引后,我能够列出父和子的所有字段。但是,如果我去"发现"选项卡,仅列出父字段。

如果我取消选中一个显示"隐藏缺失字段"的框,子文档中的字段将显示为灰色,并显示错误消息(请参阅图像)

enter image description here

我做错了什么还是Kibana4不支持亲子?如果不支持,那么代表这种关系的最佳选择是什么呢?

1 个答案:

答案 0 :(得分:5)

根据this discussion on the elastic site中的评论,P / C与嵌套对象一样,至少在可视化中不受支持。 Le叹了口气。