/ / Trova valori distinti, non conteggi distinti in elasticsearch - elasticsearch, distinto

Trova valori distinti, non distinti conteggi in elasticsearch - elasticsearch, distinti

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 № 1

Usare 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
}
}
}
}