您的位置:首页 > 健康 > 养生 > Elasticsearch 里的父子文档插入和查询

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

2024/10/6 14:32:43 来源:https://blog.csdn.net/qq_22222499/article/details/141831299  浏览:    关键词: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值"}}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com