elasticsearch是一个搜索引擎,附带了数据存储功能。相比关系数据库为关系而生而言,elasticsearch并不删除处理数据之间的关系模型。但仍然提供了对此类需求的有限支持,join和nested数据类型。尽管如此,贯穿整个elasticsearch手册都在强调的一句话是The join field shouldn’t be used like joins in a relation database. In Elasticsearch the key to good performance is to de-normalize your data into documents. 在es中,获取高性能的关键,你应该反规范化你的数据。
本节介绍join数据类型。
join数据类型可以在一个index内部的文档间建立父子关系。例如:
下面的index创建语句,创建了一个dep_staff的index,里面包含了dep(父)和staff(子)的父子关系。
PUT dep_staff
{
"mappings": {
"properties": {
"no":{
"type": "keyword"
},
"dep_name":{
"type": "keyword"
},
"staff_name":{
"type": "keyword"
},
"dep_staff_rltn":{
"type": "join",
"relations":{
"dep":"staff"
}
}
}
}
}
当然,也可以包括多层父子关系。例如:
PUT dep_staff
{
"mappings": {
"properties": {
"no":{
"type": "keyword"
},
"dep_name":{
"type": "keyword"
},
"staff_name":{
"type": "keyword"
},
"dep_staff_rltn":{
"type": "join",
"relations":{
"dep":["sub_dep","organize"],
"sub_dep":"staff",
"