Elasticsearch实战学习笔记(八) Elasticsearch文档间的关系

Elasticsearch实战学习笔记系列   Elasticsearch文档间的关系

目录

Elasticsearch实战学习笔记系列   Elasticsearch文档间的关系

一、定义文档间关系的选项概览

1.对象类型

2.嵌套类型

3.父子关系

4.反规范化

二、将对象作为字段值

1.映射和索引对象

2.在对象中搜索

3.总结

 

系列目录

Elasticsearch实战学习笔记(一) Elasticsearch介绍

Elasticsearch实战学习笔记(二) Elasticsearch环境搭建(Mac Docker)

Elasticsearch实战学习笔记(三) Elasticsearch深入功能

Elasticsearch实战学习笔记(四) Elasticsearch索引、更新和删除数据

Elasticsearch实战学习笔记(五) Elasticsearch搜索数据

Elasticsearch实战学习笔记(六) Elasticsearch分析数据

Elasticsearch实战学习笔记(七) Elasticsearch使用相关性进行搜索

Elasticsearch实战学习笔记(八) Elasticsearch文档间的关系


一、定义文档间关系的选项概览

1.对象类型

文档最终是像下面这样进行索引的

{
    ”name”:“Denver technology group”,
    ”events.date”: [”2014-12-22”, “2014-06-20”],
    ”events.title”: [”Introduction to Elasticsearch”,”Introduction to Hadoop”]
}

假设你想过滤于2014年12月主办过Hadoop会议的分组, 查询可以是这样的

"bool": { 
    "must": [
        {
            "term": {
                "events.title": "hadoop"
            }
        },
        {
            "range": {
                "events.date": {
                    "from":"2014-12-01", 
                    "to":"2014-12 -31"
                }
            }
        }
    ]
}

2.嵌套类型

如果想避免这种跨对象的匹配的发生,可以使用嵌套类型 (nested type),它将活动索引到分隔的 Lucene 文档

3.父子关系

通过父子关系,你可以使用完全不同的 Elasticsearch 文档, 将它们放在不同的类型 ,并在每种类型的映射中定义它们之间的关系 。

4.反规范化

还有一些非Elasticsearch特有的技术,NoSQL 数据存储会用其来弥补连接( join )的不足:其中一个就是反规范化(denormalizing)。以分组和其中的会员为例 ,一个分组可以拥有多于一个的会员,一个用户也可以成为多个分组的会员。分组和会员都有它们 自己的一组属性,为了表示这种关系,可以让分组成为会员的父辈 。对于身为多个分组会员的用户而言,可以反规范化他们的数据 : 每次表示一个其所属分组

替换的方案是,可以将分组会员各自单独保存在分组文档中只包含会员的 ID。 可以在应用程序中根据会员ID来连接(join)分组及其会员。 如果所要查询的会员ID数量很小,这样操作也能很好地运作


二、将对象作为字段值

Elasticsearch 中的文档可以是层次型的, Lucene 只支持扁平结构

{
    "title":"Using Hadoop with Elasticsearch", 
    "location" {
        "name":”SkillsMatter Exchange",
        "geolocation":"51.524806, -0.099095"
    }
}

1.映射和索引对象

2.在对象中搜索

 默认情况下,你需要设置所查找的字段路径,来引用内部对象,如 location.name

3.总结

使用对象来定义文档间关系

优点

  • 容易使用 不必为了索引对象而进行任何特殊的定义
  • 查询和聚集对象 就像处理扁平结构的文档那样
  • 无须使用连接join 所有的内容都属于同一篇文档

缺点

  • 对象之间没有边界 需要考虑其他选择类似嵌套类型、父子关系以及反规范化,并最终将它们和对象相结合
  • 更新一个单独的对象,需要重新索引整篇文档

系列目录

Elasticsearch实战学习笔记(一) Elasticsearch介绍

Elasticsearch实战学习笔记(二) Elasticsearch环境搭建(Mac Docker)

Elasticsearch实战学习笔记(三) Elasticsearch深入功能

Elasticsearch实战学习笔记(四) Elasticsearch索引、更新和删除数据

Elasticsearch实战学习笔记(五) Elasticsearch搜索数据

Elasticsearch实战学习笔记(六) Elasticsearch分析数据

Elasticsearch实战学习笔记(七) Elasticsearch使用相关性进行搜索

Elasticsearch实战学习笔记(八) Elasticsearch文档间的关系

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值