elasticSearch使用 inner_hits 同时返回父子文档

es 父子文档,同时返回父子文档时, inner_hits 参数比较重要。

它有4个参数:

from偏移量
size指定返回的数量,默认为3
sort排序,默认以评分排序
nameinner_hits 别名,如果缺省,则默认为type名
GET inndex_name/_search
{
    "query": {
        "has_child" : {
            "type" : "product",  // 子类型
            "query" : {
                "match_all" : {}
            },
            "max_children": 10,
            "min_children": 1, 
            "score_mode" : "min",
            "inner_hits": {  // 返回其子文档,如果没有这个参数则只返回父文档
              "size": 10
            }
        }
    }
}

如果使用默认值,则传递一个空的对象 ,也就是 {} 作为 inner_hits即可。

多个查询时,会报错,[inner_hits] already contains an entry for key [product] ,这里的 product 是默认的子类型type,所以也会使用 product 作为子类型名,而一个搜索多个 has_child 并且为同一个type时,就会报上述的错误,此时使用 inner_hits 的 name 字段使用别名,比如 product2。然后在返回值中,判断 product 或 product2 就是返回的 inner_hits。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注