Elasticsearch 使用 Inner hits 在查询时获取关联的子文档
Inner hits 的官方介绍 这里介绍了在 nested 和 has_child 查询中使用 inner_hits 在查询文档的同时直接返回其关联的 nested object 或者 子文档的方法。
使用 inner_hits 查询的例子:
json
POST test/_search
{
"query": {
"nested": {
"path": "comments",
"query": {
"match": {"comments.number" : 2}
},
"inner_hits": {}
}
}
}json
POST test/_search
{
"query": {
"has_child": {
"type": "my_child",
"query": {
"match": {
"number": 1
}
},
"inner_hits": {}
}
}
}JavaAPI 中用法类似,使用 NestedQueryBuilder 或者 HasChildQueryBuilder 的 innerHit 方法实现相同的功能。
java
BoolQueryBuilder qb = boolQuery();
qb.must(boolQuery()
.should(QueryBuilders.hasChildQuery("children",
matchAllQuery(),
ScoreMode.None
).innerHit(new InnerHitBuilder(), true))
);