2015-08-10 14 views
17

Come posso ottenere un elenco dei nomi di un indice in Python? Ecco quello che ho finora:Come ottenere un elenco di tutti gli indici in python-elasticsearch

>>> es=e.es 
>>> es 
<Elasticsearch([{'host': '14555f777d8097.us-east-1.aws.found.io', 'port': 9200}])> 
>>> es.indices 
<elasticsearch.client.indices.IndicesClient object at 0x10de86790> 
# how to get a list of all indexes in this cluster? 
+1

Hai provato i [ 'get_aliases()'] (https://elasticsearch-py.readthedocs.org/en/latest/api.html#elasticsearch. metodo client.IndicesClient.get_aliases)? Secondo [questo esempio] (https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html#_examples_2), dovresti essere in grado di utilizzare un carattere jolly '*' per ottenere tutto indici. –

+1

@MorganThrapp grazie per il puntatore e l'esempio. – David542

+0

Nessun problema. Sono contento di poterti aiutare. –

risposta

5

Questa domanda viene in su durante la ricerca di informazioni sul recupero aliases utilizzando la libreria python-elasticsearch. La risposta accettata dice di usare get_aliases ma quel metodo è stato rimosso (a partire dal 2017). Per ottenere aliases, è possibile utilizzare il seguente:

es.indices.get_alias("*") 
2

Io uso curl per chiamare l'API statistiche e ottenere informazioni relative agli indici. Quindi analizzo l'oggetto JSON restituito per trovare i nomi di indice.

curl localhost:9200/_stats 

In Python è possibile chiamare curl utilizzando la libreria delle richieste. Non conosco un modo per farlo usando la libreria Python Elasticsearch o Elasticsearch-DSL.

+0

Per qualche ragione '*/_ stats' non funzionava per me, ma' */_ mapping' funzionava. – ximiki

19

Ecco un modo per farlo con il metodo get_aliases():

>>> indices=es.indices.get_aliases().keys() 
>>> sorted(indices) 
[u'avails', u'hey', u'kibana-int'] 
+0

Qualche idea sul perché questo non funziona? 'res = es.search()' 'ordinato (set (res [" hits "] [" hits "] [k] [" _ index "] per k in xrange (len (res [" hits "] [" hits "]))))' – travelingbones

+0

Sembra che questo metodo sia stato rimosso dalle versioni recenti di python-elasticsearch (2017). – erewok

+1

Questa risposta non è valida per es5.x in poi –

1

È possibile ottenere _mapping ottenere l'elenco di tutti gli indici facendo qualcosa di simile.

requests.get(full_elastic_url + "/_mapping") 
1

Se siete disposti ad utilizzare pyelasticsearch module hanno il supporto per il comando GET _mapping, che produce lo schema del cluster. Questo vi permetterà di vedere gli indici, e forare ogni indice di vedere doc_types, ed i loro campi, ecc Ecco un esempio:

import pyelasticsearch as pyes 
es = pyes.ElasticSearch(["http://hostname0:9200", "http://hostname1:9200"]) ## don't accidentally type Elasticsearch, the class from the other two modules 
schema = es.get_mapping() ## python dict with the map of the cluster 

per ottenere solo l'elenco degli indici,

indices_full_list = schema.keys() 
just_indices = [index for index in indices_full_list if not index.startswith(".")] ## remove the objects created by marvel, e.g. ".marvel-date" 

Questo è legato a this question

20

come ottenere un elenco di tutti gli indici in questo cluster?

Utilizzare il carattere jolly. Funziona con elasticsearch-py.

for index in es.indices.get('*'): 
    print index 
Problemi correlati