2016-11-27 3 views
0

Ich mag würde alle „Beiträge“ erhalten, die Eltern „Blog“ mit der ID hat: 25 und nur die „Beiträge“, die mindestens ein Kind „Kommentar“alle Kind holen, das Kind und parent_id in Elasticsearch hat

hat

Ich bin neu bei elasticsearch. Mit Version 5

Bisher weiß ich, dass ich parent_id verwenden können, has_child und has_parent

Nicht sicher, wie kann ich diese Abfragen kombinieren ...

so weit ich habe:

GET /blog/post/_search 
{ 
    "query": { 
     "parent_id" : { 
      "type" : "post", 
      "id" : "25" 
     } 
    } 
} 

Antwort

0

Sie können Abfragen mit bool query kombinieren.
Also, vorausgesetzt Sie Ihre Zuordnungen und Daten ähnlich wie dieses Beispiel erstellt haben:

PUT /blog 
{ 
    "mappings": { 
    "blog": {}, 
    "post": { 
     "_parent": { 
     "type": "blog" 
     } 
    }, 
    "comment": { 
     "_parent": { 
     "type": "post" 
     } 
    } 
    } 
} 

POST /blog/blog/_bulk 
{ "index": { "_id": "21" }} 
{ "name": "blog 11"} 
{ "index": { "_id": "25" }} 
{ "name": "blog 25" } 
{ "index": { "_id": "22" }} 
{ "name": "blog 24"} 

POST /blog/post/_bulk 
{ "index": { "_id": "1", "parent": "21" }} 
{ "name": "post of blog 21 (with comments)"} 
{ "index": { "_id": "2", "parent": "25" }} 
{ "name": "post of blog 25 (with comments)"} 
{ "index": { "_id": "3", "parent": "25" }} 
{ "name": "post of blog 25 (without comments)"} 

POST /blog/comment/_bulk 
{ "index": { "_id": "10", "parent": "1", "routing": "21"}} 
{ "name": "comment for post 1"} 
{ "index": { "_id": "11", "parent": "2", "routing": "25" }} 
{ "name": "comment for post 2"} 

Ihre Anfrage ist:

GET blog/post/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "parent_id": { 
      "type": "post", 
      "id": "25" 
      } 
     }, 
     { 
      "has_child": { 
      "type": "comment", 
      "query": { 
       "match_all": { 

       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

Vielleicht wäre es besser geeignet sein, um Ihre Kommentare zu speichern als nested Art in Beiträge.
Sie können mehr über den Unterschied zwischen nested und parent/child Beziehungen here lesen.

Verwandte Themen