Elasticsearch儿童与父亲的问题' has_parent'

时间:2016-02-08 08:47:24

标签: elasticsearch

具有以下映射...

curl -XPUT 'localhost:9200/myindex' -d '{
  "mappings": {
    "my_parent": {},
    "my_child": {
      "_parent": {
        "type": "my_parent" 
}}}}'

......以下父母:

curl -X PUT localhost:9200/myindex/my_parent/1?pretty=true' -d '{
  "title" : "Microsiervos - Discos duros de 10TB",
  "body" : "Empiezan a sacar DD de 30GB en el mercado"
}'

和以下孩子:

curl -XPUT 'localhost:9200/myindex/my_child/2?parent=1' -d '{
  "user": "Pepe"
}'

如果我执行以下has_child查询:

curl -XGET 'localhost:9200/myindex/my_parent/_search?pretty=true' -d '{
  "query": {
    "has_child": { 
      "type": "my_child",
      "query" : {
           "query_string" : {
               "default_field" : "user",
               "query" : "Pepe"
}}}}}'

我得到了所需的输出。找到Pepe,并显示他的父亲:

  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "myindex",
      "_type" : "my_parent",
      "_id" : "2",
      "_score" : 1.0,
      "_source":{
  "title" : "Microsiervos - En el 69 llegamos a la luna",
  "body" : "Se cumplen 3123 anos de la llegada a la luna"
}

但如果我试图反过来试图让孩子们使用has_parent

curl -XGET 'localhost:9200/myindex/my_parent/_search?pretty=true' -d '{
  "query": {
    "has_parent": { 
      "parent_type": "my_parent",
      "query" : {
           "query_string" : {
               "default_field" : "body",
               "query" : "mercado"
}}}}}'

我没有得到任何点击。我想把Pepe个孩子作为输出。我错过了什么或做错了什么?

PS:我使用的是Elasticsearch 2.1.1

1 个答案:

答案 0 :(得分:1)

您在上面犯了一个错误。您正在搜索my_parent类型。如果您想使用父级获取子级,则应从child_type获取它。 将查询更改为:

curl -XGET 'localhost:9200/myindex/my_child/_search?pretty=true' -d      
'{
"query": {
"has_parent": { 
  "parent_type": "my_parent",
  "query" : {
       "query_string" : {
           "default_field" : "body",
           "query" : "mercado"
      }
    }
  }
 }
}'

请注意我已经使用过

curl -XGET 'localhost:9200/myindex/my_child/_search?pretty=true' 

而不是

curl -XGET 'localhost:9200/myindex/my_parent/_search?pretty=true'