Skip to content

Elasticsearch 使用 Inner hits 在查询时获取关联的子文档

Inner hits 的官方介绍 这里介绍了在 nestedhas_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 或者 HasChildQueryBuilderinnerHit 方法实现相同的功能。

java
BoolQueryBuilder qb = boolQuery();
qb.must(boolQuery()
	.should(QueryBuilders.hasChildQuery("children",
		matchAllQuery(),
		ScoreMode.None
	).innerHit(new InnerHitBuilder(), true))
);