documenti indicizzati sono come:L'aggiunta di campi aggiuntivi per elasticsearch termini di aggregazione
{
id: 1,
title: 'Blah',
...
platform: {id: 84, url: 'http://facebook.com', title: 'Facebook'}
...
}
Quello che voglio è di conteggio e di uscita statistiche-by-piattaforma. Per il conteggio, posso usare termini di aggregazione con platform.id
come un campo a contare:
aggs: {
platforms: {
terms: {field: 'platform.id'}
}
}
In questo modo ho ricevuto le statistiche come un multiplo secchi che assomigliano {key: 8, doc_count: 162511}
, come previsto.
Ora, posso in qualche modo aggiungere a quei bucket anche platform.name
e platform.url
(per un output piuttosto elevato di statistiche)? Il migliore che ho è venuto con un look come:
aggs: {
platforms: {
terms: {field: 'platform.id'},
aggs: {
name: {terms: {field: 'platform.name'}},
url: {terms: {field: 'platform.url'}}
}
}
}
che, di fatto, le opere, e restituisce la struttura piuttosto complicato di ciascun segmento:
{key: 7,
doc_count: 528568,
url:
{doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [{key: "http://facebook.com", doc_count: 528568}]},
name:
{doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [{key: "Facebook", doc_count: 528568}]}},
Naturalmente, il nome e l'URL della piattaforma potrebbe essere estratto da questa struttura (come bucket.url.buckets.first.key
), ma esiste un modo più semplice e pulito per eseguire l'operazione?
Vedi qualche soluzione al vostro problema? Sto affrontando lo stesso adesso :( –
L'ho postato qui sotto come la mia risposta "accettata" :) – zverok