2014-04-30 15 views

risposta

6

Partendo 1.3 hai il campo meta _field_names.

{ 
    "aggs": { 
    "Field names": { 
     "terms": { 
     "field": "_field_names", 
     "size": 10 
     } 
    } 
    } 
} 
+1

non funziona più con 5.x Vedi: https://github.com/elastic/elasticsearch/issues/22576 – naoko

12

Spiegazione:

Non credo che ci sia un modo per fare esattamente questo. Ma dal momento che tutto nell'indice viene automaticamente inserito nella mappatura, sappiamo che la mappatura contiene almeno tutti i campi dell'indice. Da lì, puoi eseguire il ciclo di ogni campo nel mapping ed eseguire un conteggio sul numero di risultati dell'indice che contiene quel campo. Se il conteggio è maggiore di 0, allora quel campo esiste; se il conteggio è 0, allora quel campo non fa parte dell'indice. Poiché sappiamo che ogni campo dell'indice sarà presente nella tua mappatura, questo dovrebbe coprire tutte le possibilità.

Alcune chiamate esempio API:

# Get the mapping 
$ curl -XGET 'http://localhost:9200/index/type/_mapping?pretty' 

# Count a field 
$ curl -XGET 'http://localhost:9200/index/type/_count' -d ' 
{ 
    "query" : { 
     "constant_score" : { 
      "filter" : { 
       "exists" : { "field" : "name_from_mapping" } 
      } 
     } 
    } 
}' 

Documentation:

+0

Si prega di notare che con la mia risposta dovrete gettare del codice (o fare un lavoro manuale) per determinare effettivamente quali campi esistono nel vostro indice .. questo è più di una teoria/spiegazione/risorsa per iniziare – Sam

3

Nella versione corrente (5.2), è possibile utilizzare l'API di mappatura per ottenere tutti i nomi dei campi:

GET index_name/_mapping?pretty 

si rimanda al official document per ulteriori informazioni.

Problemi correlati