Elasticsearch宝典(3):Elasticsearch中特殊数据类型的处理

文/田雪松Elasticsearch索引字段中定义了一些特殊数据类型,用于反映某些特殊的数据关系或数据表示方法。由于这些数据类型都与一组DSL查询和聚集查询相关联,所以本书在第2章第2.3节中并没有介绍它们,而是集中在这一章统一介绍。这些特殊数据类型主要包括join类型、nested类型和地理坐标。除了DSL和聚集查询以外,Elasticsearch在Basic授权中还提供了一种基于SQL语...
摘要由CSDN通过智能技术生成

在这里插入图片描述
文/田雪松

Elasticsearch索引字段中定义了一些特殊数据类型,用于反映某些特殊的数据关系或数据表示方法。由于这些数据类型都与一组DSL查询和聚集查询相关联,所以本书在第2章第2.3节中并没有介绍它们,而是集中在这一章统一介绍。这些特殊数据类型主要包括join类型、nested类型和地理坐标。
除了DSL和聚集查询以外,Elasticsearch在Basic授权中还提供了一种基于SQL语法的查询语言,这种查询语言可以以类似SQL语言的形式执行文档检索。由于这种SQL语言在Kibana画布功能中需要使用,所以本章在最后一小节会对它做简要介绍。

1 父子关系
Elasticsearch中的父子关系是单个索引内部文档与文档之间的一种关系,父文档与子文档同属一个索引并通过父文档_id建立联系,类似于关系型数据库中单表内部行与行之间的自关联。

1.1 join类型
在Elasticsearch中并没有外键的概念,文档之间的父子关系通过给索引定义join类型字段实现。例如创建一个员工索引employees,定义一个join类型的management字段用于确定员工之间的管理与被管理关系:

PUT employees
{
  "mappings": {
    "properties": {
      "management":{
        "type": "join",
        "relations": {
          "manager":"member"
        }
      }
    }
  }
}

示例1 创建join类型字段
在示例1中,management字段的数据类型被定义为join,同时在该字段的relations参数中定义父子关系为manager与member,其中manager为父而member为子,它们的名称可由用户自定义。文档在父子关系中的地位,是在添加文档时通过join类型字段指定的。还是以employees索引为例,在向employees索引中添加父文档时,应该将management字段设置为manager;而添加子文档时则应该设置为member。具体如下:

PUT /employees/_doc/1
{
  "name":"tom",
  "management": {
    "name":"manager"
  }
}
PUT /employees/_doc/2?routing=1
{
  "name":"smith",
  "management": {
    "name":"member",
    "parent": "1"
  }
}
PUT /employees/_doc/3?routing=1
{
  "name":"john",
  "management": {
    "name":"member",
    "parent": "1"
  }
}

示例2 父子关系添加文档
在示例2中,编号为1的文档其management字段通过name参数设置为manager,即在索引定义父子关系中处于父文档的地位;而编号为2和3的文档其management字段则通过name参数设置为member,并通过parent参数指定了它的父文档为编号1的文档。在使用父子关系时,要求父子文档必须要映

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值