2015-11-02 79 views
3

我使用Elasticsearch RC 2.0.0。Elasticsearch - Has_Parent或Has_Child查询返回空结果

我得到了一些亲子关系在我的Elasticsearch数据库。我想检索与父对象相关的所有Children。我总是收到一个空的结果列表。我遵循elasticsearch文档的说明,并将我的代码与几本书进行了比较。我不明白,为什么我的查询应该返回一个空的结果。

在这种情况下,我建立了一个简化的例子。我将两个对象放到elasticsearch中,并将对象a设置为对象b的父对象。然后我尝试检索所有对象,其中有一个父类型为a的。

这是我输入:

PUT test 

PUT test/myobject/_mapping 
    { 
     "myobject":{ 
     "_parent" : {"type":"pobject"}, 
     "properties" : { 
     "name" : {"type":"string"} 
     } 

     } 
    } 

    PUT test/pobject/_mapping 
    { 
     "pobject" : { 
      "properties": { 
       "name": {"type":"string"} 
      } 

     } 

    } 

    PUT test/pobject/1 
    { 
     "name":"theParent" 
    } 

    PUT test/myobject/1?_parent=1&routing=_id 
    { 
     "name":"theChild" 
    } 

    POST test/myobject/_search?routing=_id 
    { 
     "query":{ 
      "has_parent":{ 
       "type":"pobject", 
      "query":{ 
       "match_all":{} 
      } 
      } 
     } 


    } 

这将返回

{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
     "total": 1, 
     "successful": 1, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 0, 
     "max_score": null, 
     "hits": [] 
    } 
} 

回答

3

的错误是在这里:PUT test/myobject/1?_parent=1&routing=_id

参数为parent,不_parent

POST test/myobject/1?parent=1 
{ 
    "name": "theChild" 
} 

而且,你不需要使用routing=_id。请参阅documentation

命令的完整列表测试:

DELETE test 
PUT test 

PUT test/myobject/_mapping 
{ 
    "myobject": { 
    "_parent": { 
     "type": "pobject" 
    }, 
    "properties": { 
     "name": { 
     "type": "string" 
     } 
    } 
    } 
} 

PUT test/pobject/_mapping 
{ 
    "pobject": { 
    "properties": { 
     "name": { 
     "type": "string" 
     } 
    } 
    } 
} 

POST test/pobject/1 
{ 
    "name": "theParent" 
} 

POST test/myobject/1?parent=1 
{ 
    "name": "theChild" 
} 

POST test/myobject/_search 
{ 
    "query": { 
    "has_parent": { 
     "parent_type": "pobject", 
     "query": { 
     "match_all": {} 
     } 
    } 
    } 
} 
+0

您好,感谢,但我仍然会收到一个空resultlist。无论如何,当我打电话给测试/ myobject/1我看到有一个家长注册这个项目。 – Goot

+0

@Goot更新了我的答案。 –

+0

原因:我使用父类型参数的错误名称(“类型”而不是“parent_type”),我在使用映射参数时也犯了一个错误。谢谢 – Goot