0%

elasticsearch连接查询

elasticsearch连接查询

在elasticsearch中提供了两种关联关系,一种是嵌套关系,一种是父子关系,可以进行这两种关联的查询

嵌套查询

嵌套查询可以查询嵌套对象,执行的查询把嵌套兑现作为父文档的单独文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"query": {
"nested" : {
"path" : "obj1", // 父对象,即嵌套对象的路径
"query" : { // 该查询是在path路径下的嵌套文档中执行,其内使用的字段必须要使用全路径
"bool" : {
"must" : [
{ "match" : {"obj1.name" : "blue"} },
{ "range" : {"obj1.count" : {"gt" : 5}} }
]
}
},
"score_mode" : "avg" // 设置内部子匹配如何影响父匹配的得分,默认是avg,还可以设置为sum/min/max/none
}
}
}

父子查询

子文档查询

子文档查询将父文档拥有的查询返回匹配到的子文档

1
2
3
4
5
6
7
8
9
10
11
12
{
"query": {
"has_child" : {
"type" : "blog_tag",
"query" : {
"term" : {
"tag" : "something"
}
}
}
}
}

父文档查询

父文档查询在父文档中执行,通过parent_type指定,返回关联匹配的父文档的子文档

1
2
3
4
5
6
7
8
9
10
11
12
{
"query": {
"has_parent" : {
"parent_type" : "blog",
"query" : {
"term" : {
"tag" : "something"
}
}
}
}
}