2016-04-07 16 views
3

Ich habe ähnliche Fragen gepostet, aber natürlich sind keine genau das, was ich versuche zu tun.Elasticsearch: Abfrage eines verschachtelten Arrays

Wenn ich die Abfrage ausführen unten ich diesen Fehler:

"reason": "[nested] failed to find nested object under path [contentGroup]"

ich glaube, das Problem ist, contentGroup.name existiert nicht, weil content ein Array ist kein Objekt. Es muss so etwas sein: contentGroup [0] .name und contentGroup [1] .name Aber ich kann nicht herausfinden, wie man das macht.

Eine andere Sache, die falsch sein kann, ist, dass ich zwei Elemente ineinander verschachtelt habe, ich weiß nicht, ob das richtig ist oder nicht.

Jede Hilfe wäre großartig!

Mein Mapping:

{ 
"mappings": { 
    "articles": { 
     "properties": { 
      "contentGroups": { 
       "type": "nested", 
       "properties": { 
        "contentGroup": { 
         "type": "nested", 
         "properties": { 
          "id": { 
          "type": "string" 
          }, 
          "name": { 
           "type": "string" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Was erstellt wird, wenn ich Eingang in einem Artikel (die Array Hinweis erstellt wird):

"contentGroups": { 
"contentGroup": [ 
    { 
     "name": "Breaking", 
     "id": "104" 
    }, 
    { 
     "name": "News", 
     "id": "22" 
    } 
] 

Meine Frage:

{ 
"query": { 
    "bool": { 
     "must": [ 
      { "match": { "headline": "whatever" }}, 
      { 
       "nested": { 
        "path": "contentGroup", 
        "query": { 
         "bool": { 
          "must": [ 
           { "match": { "contentGroup.name": "Breaking" }} 
          ] 
         } 
        } 
       } 
      } 
     ] 
    } 
} 

Antwort

3

Sie sollen Verwenden Sie einfachere Zuordnung:

{ 
    "mappings": { 
    "articles": { 
     "properties": { 
     "contentGroups": { 
      "properties": { 
      "id": { 
       "type": "string" 
      }, 
      "name": { 
       "type": "string" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Jedes Feld in elasticsearch unterstützt bereits mehrere Werte, keine Angabe erforderlich.

+1

Das funktionierte für mich! Solch eine einfache Lösung auch! Vielen Dank! –

Verwandte Themen