Documentazione di Elasticsearch suggerisce* che il loro pezzo di codice
* documentazione corretta
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"cardinality": {
"field": "color"
}
}
}
}
corrisponde alla query sql
SELECT DISTINCT(color) FROM cars
ma in realtà corrisponde a
SELECT COUNT(DISTINCT(color)) FROM cars
Non voglio sapere quanti valori distinti ho ma quali sono i valori distinti. Qualcuno sa come raggiungerlo?
risposte:
21 per risposta № 1Usare un aggregazione dei termini sul color
campo. E devi prestare attenzione a come viene analizzato quel campo su cui vuoi ottenere valori distinti, il che significa che devi assicurarti di non "tokenizzare" durante l'indicizzazione, altrimenti ogni voce nell'aggregazione sarà un termine diverso che fa parte di il contenuto del campo.
Se si desidera ancora la tokenizzazione E utilizzare il terms
aggregazione che potresti voler guardare not_analyzed
tipo di indicizzazione per quel campo e forse usare multi campi.
Aggregazione di termini per auto:
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
18 per risposta № 2
Per aggiornare la risposta eccellente di Andrei Stefan, dobbiamo dire che il parametro query search_type=count
non è più supportato in Elasticsearch 5. Il nuovo modo di farlo è aggiungere "size" : 0
nel corpo come:
GET /cars/transactions/_search
{
"size": 0,
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}