Creating the index with mapping
PUT /company
{
"mappings": {
"properties": {
"join_field": {
"type": "join",
"relations": {
"company": ["department", "supplier"],
"department": "employee"
}
}
}
}
}
PUT /company/_doc/1
{
"name": "My Company Inc.",
"join_field": "company"
}
PUT /company/_doc/2?routing=1
{
"name": "Development",
"join_field": {
"name": "department",
"parent": 1
}
}
PUT /company/_doc/3?routing=1
{
"name": "Bo Andersen",
"join_field": {
"name": "employee",
"parent": 2
}
}
Adding some more test data
PUT /company/_doc/4
{
"name": "Another Company, Inc.",
"join_field": "company"
}
PUT /company/_doc/5?routing=4
{
"name": "Marketing",
"join_field": {
"name": "department",
"parent": 4
}
}
PUT /company/_doc/6?routing=4
{
"name": "John Doe",
"join_field": {
"name": "employee",
"parent": 5
}
}
Example of querying multi-level relations
GET /company/_search
{
"query": {
"has_child": {
"type": "department",
"query": {
"has_child": {
"type": "employee",
"query": {
"term": {
"name.keyword": "John Doe"
}
}
}
}
}
}
}