对象类型

  • 概述
    • 将一个对象作为文档字段的值,对象类型更适合处理一对一的关系,且简单容易使用
  • 缺点
    • 在系统内部,对象之间没有边界,因此存放对象数组(一对多)时查询多个字段可能出现意外的结果
    • 更新一个单独的对象需要重新索引整篇文档
      ElasticSearch—文档间的关系

嵌套类型(nested)

  • 概述
    • 在Lucene层面将不同的对象分隔到不同的文档,解决了对象类型一对多的对象之间无边界问题
    • ElasticSearch将根文档,文档字段的数组对象分别索引到不同的文档,并将他们放在同一个单独的分块
      ElasticSearch—文档间的关系
  • 开启跨对象的匹配
    • include_in_root: 可以使嵌套文档的字段也会被索引到根文档中
    • include_in_parent: 多层级的嵌套文档,可以将嵌套文档的字段索引到最近的父辈文档中
  • 嵌套文档的查询
    • nested查询或过滤器,需要指定path参数,告诉ElasticSearch这些嵌套位于哪个Lucene分块中
    • reverse_nested逆向嵌套查询,反向访问父辈文档
  • 嵌套类型得分
    • 通过score_mode设置,有avg,total, max, node4中模式,默认是avg

父子关系

  • 概述
    • 只是映射文档的父子关系,在mapping中通过_parent属性指向父辈文档, 对文档的索引,更新,删除比较友好
    • 在索引或检索子文档都必须指定父文档的id,因此同一个父文档的子文档都被分配在同一个分片上,避免了网络传输
  • 检索
    • has_child: 通过子文档查询父文档
    • has_parent: 通过父文档查询子文档

反规范化(denormalizing)

  • 使用冗余数据避免join操作
  • 缺点: 在索引,更新和删除文档时,必须处理冗余的数据

应用端的连接

在应用程序中使用join查询,类似SQL的子查询

相关文章:

  • 2021-09-06
  • 2021-07-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-27
  • 2021-06-30
  • 2021-06-30
猜你喜欢
  • 2021-07-01
  • 2022-12-23
  • 2021-09-13
  • 2021-11-04
  • 2021-06-22
  • 2021-08-02
  • 2021-12-07
相关资源
相似解决方案