当前位置: 首页 > news >正文

Elasticsearch 里的父子文档插入和查询

文章目录

      • 场景
      • 定义
      • insert 语句
      • 查询

场景

父子结点,常用于1:n 关系,有一个父子文档,对应多个子文档。

定义

定义一个my_id 字段
定义一个my_join_field字段,类型是join 类型,这里的relations 指的
相当于sql里的 a.aa=b.bb
aa里面的值是question
bb里面的值是answer
然后认为这两个相等,把父子联系起来

PUT my-index-000001
{"mappings": {"properties": {"my_id": {"type": "keyword"},"my_join_field": { "type": "join","relations": {"question": "answer" }}}}
}

insert 语句

插入父子结点

PUT my-index-000001/_doc/1?refresh
{"my_id": "1","text": "This is a question","my_join_field": {"name": "question" }
}

插入子结点

PUT my-index-000001/_doc/3?routing=1&refresh 
{"my_id": "3","text": "This is an answer","my_join_field": {"name": "answer", "parent": "1" }
}PUT my-index-000001/_doc/4?routing=1&refresh
{"my_id": "4","text": "This is another answer","my_join_field": {"name": "answer","parent": "1"}
}

从上面可以看出来,父子结点要分开插入,至于父文档和子文档,其实两个的字段实际上是通用的,共享同一个mapping

注意观察,通过parent 把具体的父ID和具体的子文档关联了起来。

 "parent": "1"

查询

有两个重要的方法

has_child 用来写child的限定条件,返回父文档

GET /my-index-000001/_search
{"query": {"has_child": {"type": "answer","query": {"match": {"my_id": "具体ID值"}}}}
}

has_parent 用来写parent的限定条件,返回子文档

GET /my-index-000001/_search
{"query": {"has_parent": {"parent_type": "question","query": {"match": {"my_id": "具体ID值"}}}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • upload-labs通关攻略
  • jetson orin nx安装todesk
  • Matlab三维图的坐标轴标签 自动平行坐标/自动旋转
  • Android耗电优化,如何定位问题,如何修改
  • Unity学习路线
  • vscode上传自己开发的npm包
  • 哈希表(模拟实现)
  • Linux基础指令(2)
  • Mysql 巧秒避开 varchar 类型的 max()、min() 函数的坑
  • CSS中响应式设计
  • 利用衍射进行材料分析--Muad
  • 【Java】—— Java面向对象进阶:Java中的多态、继承与类型判断- instanceof 操作符与方法重载的模拟
  • MySQL基础学习:如何排查慢SQL
  • 什么是CAP理论和BASE思想?
  • wpf prism 《1》、区域 、模块化
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 30天自制操作系统-2
  • docker python 配置
  • eclipse(luna)创建web工程
  • gitlab-ci配置详解(一)
  • IOS评论框不贴底(ios12新bug)
  • jdbc就是这么简单
  • Js基础知识(一) - 变量
  • leetcode46 Permutation 排列组合
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • ubuntu 下nginx安装 并支持https协议
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 后端_MYSQL
  • 京东美团研发面经
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 详解移动APP与web APP的区别
  • 选择阿里云数据库HBase版十大理由
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $().each和$.each的区别
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Java数据结构)ArrayList
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (新)网络工程师考点串讲与真题详解
  • (一) springboot详细介绍
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 连接数据库,通过数据库生成Modell