突出显示has_child查询

时间:2015-01-12 19:13:01

标签: elasticsearch

在我们的一些类型中,我们有一个父子设置,我们想要搜索父字段以及子字段(并返回父节点),我们进行如下查询。当存在has_child匹配时,即使正在返回父级,也有任何方法可以从子匹配中获取突出显示信息。例如,如果我们有如下映射:

PUT nested2
{
  "mappings":{
    "discussion":{
        "properties" : {
            "title":{
                "type":"string"
            }
        }
    },
    "discussionPost":{
        "_parent":{
            "type" : "discussion"
        },
        "properties" : {
            "post" : {
                "type" : "string"
            }
        }
    }
  }
}

我们发出如下所示的查询,如果父字段匹配则返回突出显示信息,但如果由于has_child匹配而返回父项则不会返回:

POST nested2/discussion/_search
{
  "query": {
    "bool": {
        "should": [
            {
                "prefix": {
                    "_all" : "cat"
                }    
            },
            {   
                "has_child" : {
                    "type" : "discussionPost",
                    "score_mode" : "sum",
                    "query" : {
                        "prefix": {
                            "_all" : "cat"
                        }  
                    }
                }
            }
        ],
        "minimum_should_match": 1
    }
  },
  "highlight":{
    "fields":{
      "*":{}
    }
  }
}

当父母发出has_child查询时,是否可以获得有关孩子匹配内容的突出显示信息?

此致 LT

1 个答案:

答案 0 :(得分:0)

可以在inner_hits查询子句中使用has_child来做到这一点:

{
  "query": {
    "bool": {
        "should": [
            {   
                "has_child" : {
                    "inner_hits": {
                        "_source": false,
                        "highlight":{
                            "order": "score",
                            "fields": {"*":{}}
                        }
                    },
                    "type" : "discussionPost",
                    "score_mode" : "sum",
                    "query" : {
                        "prefix": {
                            "_all" : "cat"
                        }  
                    }
                }
            }
        ],
        "minimum_should_match": 1
    }
  }
}