2013-05-30 11 views
5

Sto utilizzando documenti nidificati in ES. Ho nidificato array all'interno di un'entità e mi piacerebbe poter filtrare array con query nidificate (non solo filtro root/genitore doc ma anche array nidificati).Come filtrare l'array annidato in risposta?

I filtri nidificati consentono di filtrare il documento root. Ad esempio, se ho indice "blog" e digito "blog" e all'interno del documento del blog ho una proprietà "commenti" (array di commenti), con {"type": "nested"} in mapping, quindi ad esempio voglio per filtrare i blog che hanno commenti che hanno titolo come "oggi" (ad esempio con la query di corrispondenza) ma in ogni blog voglio anche mostrare solo i commenti che contengono "oggi" nel titolo.

So come filterworks annidato. Anche la relazione figlio-genitore non è buona per questo scopo perché non ci sono documenti secondari in risposta come parte del documento genitore.

C'è un modo per farlo direttamente in elasticsearch, senza aggiungere ulteriore logica all'applicazione, che può influire sulle prestazioni? Oppure c'è e prevede di aggiungere questa come nuova opzione nella query/filtro annidato nelle prossime versioni o qualcosa di simile?

Grazie

... Aggiungi

Per esempio, date un'occhiata a questo documento:

 
..... 
"blogs" :[ 
    { 
     "id":1000, 
     "content":"hello world!!!", 
     "author:"evan", 
     "createTime":"2013-05-31", 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"}, 
        {"author":"tom", id:"2", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"oliver", id:"3", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"Jonesie", id:"4", "content":"test test","createTime":"2013-05-29"} 
      ] 
    }, 
    { 
     "id":1001, 
     "content":"test data", 
     "author:"jack", 
     "createTime":"2013-05-30", 
      "comments" : [ 
        {"author":"Zach", id:"11", "content":"test data 1","createTime":"2013-05-31"}, 
        {"author":"tom", id:"21", "content":"test data 2","createTime":"2013-05-31"}, 
        {"author":"oliver", id:"31", "content":"test test 3","createTime":"2013-05-28"}, 
        {"author":"Jonesie", id:"41", "content":"test test 4","createTime":"2013-05-27"} 
      ] 
    } 
] 
..... 

vorrei correre interrogazione come:

filtro blog. createTime == '2013-05-31' e filtro blogs.comments.createTime == '2013-05-31'

aspettarsi:

 
..... 
"blogs" :[ 
    { 
     "id":1000 
     "content":"hello world!!!", 
     "author::"evan", 
     "createTime":"2013-05-31" 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"} 
      ] 
    } 
] 
.... 

grazie

+1

È possibile aggiungere alcuni dati di test alla domanda? Non è abbastanza chiaro come sia la tua struttura dati. – imotov

risposta