web-dev-qa-db-fra.com

Comment obtenir une liste de tous les index dans python-elasticsearch

Comment puis-je obtenir une liste des noms d'un index en Python? Voici ce que j'ai jusqu'à présent:

>>> 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?
40
David542

Cette question se pose lors de la recherche d'informations sur la récupération de aliases à l'aide de python-elasticsearch bibliothèque. La réponse acceptée dit d'utiliser get_aliases mais cette méthode a été supprimée (à partir de 2017). Pour obtenir aliases, vous pouvez utiliser ce qui suit:

 es.indices.get_alias("*")
31
erewok

comment obtenir une liste de tous les index de ce cluster?

Utilisez le caractère générique. Fonctionne avec elasticsearch-py.

for index in es.indices.get('*'):
  print index
30
pascal

Voici une façon de le faire avec la méthode get_alias() :

>>> indices=es.indices.get_alias().keys()
>>> sorted(indices)
[u'avails', u'hey', u'kibana-int']
24
David542

Si vous êtes prêt à utiliser module pyelasticsearch ils prennent en charge le GET _mapping, qui produit le schéma du cluster. Cela vous permettra de voir les index et d'explorer chaque index pour voir les doc_types et leurs champs, etc. Voici un exemple:

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

Pour obtenir juste la liste des indices,

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"

Ceci est lié à cette question

3
travelingbones

J'utilise curl pour appeler l'API stats et obtenir des informations sur les indices. Ensuite, j'analyse l'objet JSON qui est retourné pour trouver les noms d'index.

curl localhost:9200/_stats

Dans Python vous pouvez appeler curl en utilisant la bibliothèque de requêtes. Je ne connais aucun moyen de le faire en utilisant Elasticsearch ou Elasticsearch-DSL Python bibliothèque.

2
MauricioRoman

Vous pouvez obtenir _mapping pour obtenir la liste de tous les index en faisant quelque chose comme ça.

requests.get(full_elastic_url + "/_mapping")
2
Ahmed