使用内部命中来查询父子关系中的数据

时间:2015-12-08 08:58:42

标签: elasticsearch parent-child

我使用父子关系建模数据。我希望能够使用内部命中从父母那里获取一个特定的孩子,这是我对内部命中定义的理解。

我的映射是:

{
   "mappings": {
      "parent_type": {
         "properties": {
            "num_prop": {
               "type": "integer"
            },
            "str_prop": {
               "type": "string"
            }
         }
      },
      "child_type": {
         "_parent": {
            "type": "parent_type"
         },
         "properties": {
            "child_num": {
               "type": "integer"
            },
            "child_str": {
               "type": "string"
            }
         }
      }
   }
}

我的数据是:

{"index":{"_type":"parent_type","_id":1}}
{"num_prop":1,"str_prop":"hello"}
{"index":{"_type":"child_type","_id":1,"_parent":1}}
{"child_num":11,"child_str":"foo"}
{"index":{"_type":"child_type","_id":2,"_parent":1}}
{"child_num":12,"child_str":"bar"}
{"index":{"_type":"parent_type","_id":2}}
{"num_prop":2,"str_prop":"goodbye"}
{"index":{"_type":"child_type","_id":3,"_parent":2}}
{"child_num":21,"child_str":"baz"}
{"index":{"_type":"child_type","_id":4,"_parent":2}}
{"child_num":13,"child_str":"foo"}

如上所示,身份1的父母有两个孩子" foo"并且" bar"和父母2也有一个孩子" foo"。现在我想要fooh foo和它的父1 - 我试图使用内部命中。

{
  "query": {
    "has_child": {
      "type": "child_type",
      "query": {
                "match": { "child_str":   "foo"}
      } }

      },

      "inner_hits": {

      "parent_type" : {
            "type" : { 

                    "parent_type" : {
                    "query" : {
                        "match" : {"str_prop" : "hello"} 
                    }

                }
            }




}
}
}

然而,这不起作用。有人可以告诉我这里有什么问题吗?

谢谢和问候, 普里亚

1 个答案:

答案 0 :(得分:1)

答案是:

{
 "query": {
    "filtered": {
      "query": {


            "match": { "str_prop":   "hello"}


      },
      "filter":{
        "has_child": {
          "type": "child_type",
          "query" : {
            "filtered": {
              "query": { "match_all": {}},
              "filter" : {
                "and": [
                  {"match": {"child_str": "foo"}}
                ]
              }
            }
          },

          "inner_hits" : {}
        }
      }
    }
  }

}