本文主要是介绍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值"}}}}
}
这篇关于Elasticsearch 里的父子文档插入和查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!