Non riesco a rendere il filtro + aggregazione elasticsearch per funzionare con i campi nidificati. Lo schema dei dati (parte rilevante) è come questo:L'aggregazione Elasticsearch non funziona con i campi di tipo annidato
"mappings": {
"rb": {
"properties": {
"project": {
"type": "nested",
"properties": {
"age": {
"type": "long"
},
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
Essenzialmente "rb" oggetto contiene un campo nidificato chiamato "progetto", che contiene altri due campi - "nome" e "l'età". Query sto correndo:
"aggs": {
"root": {
"aggs": {
"group": {
"aggs": {
"filtered": {
"aggs": {
"order": {
"percentiles": {
"field": "project.age",
"percents": ["50"]
}
}
},
"filter": {
"range": {
"last_updated": {
"gte": "2015-01-01",
"lt": "2015-07-01"
}
}
}
}
},
"terms": {
"field": "project.name",
"min_doc_count": 5,
"order": {
"filtered>order.50": "asc"
},
"shard_size": 10,
"size": 10
}
}
},
"nested": {
"path": "project"
}
}
}
Questa query dovrebbe produrre migliori 10 progetti (campo project.name), che corrispondono al filtro data, ordinato secondo la loro età media, ignorando i progetti con meno di 5 menziona nel database . La mediana deve essere calcolata solo per i progetti corrispondenti al filtro (intervallo di date).
Nonostante abbia più di centomila oggetti nel database, questa query produce un elenco vuoto. Nessun errore, solo una risposta vuota. Ho provato sia su ES 1.6 e ES 2.0-beta.
Funziona! Ho solo dovuto aumentare shard_size a 100 per ottenere effettivamente 10 valori indietro. Ti spiace spiegare perché la mia variante originale non ha funzionato? È una limitazione in ES che non supporta i filtri all'interno dei campi nidificati? – extesy
All'interno di un'aggregazione 'nested' è possibile solo fare riferimento a campi nidificati. Inoltre, ha più senso filtrare prima i dati basati su 'last_updated' e solo successivamente per operare sui dati annidati. – Val
@Val - Puoi dirmi come posso farlo per il bucket multivalore? Domanda separata - http://stackoverflow.com/questions/43451667/elasticsearch-ordering-aggregation-by-nested-aggregation-on-nested-field –