定义类型,rd_center和employee,其中employee是company的子类。
PUT /company
{
"mappings": {
"rd_center": {},
"employee": {
"_parent": {
"type": "rd_center"
}
}
}
}
添加研发公司数据
POST /company/rd_center/_bulk
{ "index": { "_id": "1" }}
{ "name": "北京研发总部", "city": "北京", "country": "中国" }
{ "index": { "_id": "2" }}
{ "name": "上海研发中心", "city": "上海", "country": "中国" }
{ "index": { "_id": "3" }}
{ "name": "硅谷人工智能实验室", "city": "硅谷", "country": "美国" }
添加员工数据,需要指明父类
PUT /company/employee/1?parent=1
{
"name": "张三",
"birthday": "1970-10-24",
"hobby": "爬山"
}
修改删除也是一样的要指明parent字段的值,不然会报错
{
"error": {
"root_cause": [
{
"type": "routing_missing_exception",
"reason": "routing is required for [company]/[employee]/[1_update]",
"index_uuid": "_na_",
"index": "company"
}
],
"type": "routing_missing_exception",
"reason": "routing is required for [company]/[employee]/[1_update]",
"index_uuid": "_na_",
"index": "company"
},
"status": 400
}
has_child查询,根据子类筛选出父类。
查询包含1970后出生的研发基地。
GET /company/rd_center/_search
{
"query": {
"has_child": {
"type": "employee",
"query": {
"range": {
"birthday": {
"gte": "1970-01-01"
}
}
}
}
}
}
has_parent查询,根据父类型搜索出子类
查询子类中父类为的字段country的值为中国。添加inner_hits字段,返回命中的父类。
GET /company/employee/_search
{
"query": {
"has_parent": {
"parent_type": "rd_center",
"query": {
"term": {
"country.keyword": "中国"
}
},
"inner_hits":{}
}
}
}
分组聚合
按country分bulk,再按hobby进行分组,得到country、hobby维度的个数。
GET /company/rd_center/_search
{
"size": 0,
"aggs": {
"group_by_country": {
"terms": {
"field": "country.keyword"
},
"aggs": {
"group_by_child_employee": {
"children": {
"type": "employee"
},
"aggs": {
"group_by_hobby": {
"terms": {
"field": "hobby.keyword"
}
}
}
}
}
}
}
}