2015-01-28 15 views
20

Elasticsearch documentation suggerisce * che il loro pezzo di codiceTrova valori distinti, i conteggi non distinti in elasticsearch

* documentazione fisso

GET /cars/transactions/_search?search_type=count 
{ 
    "aggs": { 
    "distinct_colors": { 
     "cardinality": { 
     "field": "color" 
     } 
    } 
    } 
} 

corrisponde alla domanda di 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 riuscirci?

+0

duplicati di https://stackoverflow.com/questions/25465215/elasticsearch-return-unique-values ​​ – Anton

risposta

20

Utilizzare un terms aggregation nel campo color. E devi prestare attenzione a come il campo in cui vuoi ottenere valori distinti viene analizzato, il che significa che devi assicurarti di non renderlo token durante l'indicizzazione, altrimenti ogni voce nell'aggregazione sarà un termine diverso che fa parte di il contenuto del campo.

Se si vuole ancora tokenizzazione e di utilizzare l'aggregazione terms si potrebbe desiderare di guardare not_analyzed tipo di indicizzazione per quel campo, e magari utilizzare multi fields.

Termini di aggregazione per le auto:

GET /cars/transactions/_search?search_type=count 
{ 
    "aggs": { 
    "distinct_colors": { 
     "terms": { 
     "field": "color", 
     "size": 1000 
     } 
    } 
    } 
} 
16

Per aggiornare la risposta eccellente da Andrei Stefan, dobbiamo dire che il parametro di query search_type=count non viene più supportato in elasticsearch 5. Il nuovo modo di fare questo è quello di aggiungi "size" : 0 nel corpo come ad esempio:

GET /cars/transactions/_search 
{ 
    "size": 0, 
    "aggs": { 
    "distinct_colors": { 
     "terms": { 
     "field": "color", 
     "size": 1000 
     } 
    } 
    } 
} 
+3

cosa significa il 1000 significa? – codereal

+0

In termini di aggregazione, la [documentazione] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size) dice che: 'Le dimensioni parametro può essere impostato per definire quanti bucket di termini devono essere restituiti dall'elenco termini complessivo. –

+2

Aggregazioni di termini per default restituiscono solo 10 bucket. "size" specifica il numero di bucket richiesti nella risposta. Vedere https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size –