web-dev-qa-db-ja.com

python-elasticsearchですべてのインデックスのリストを取得する方法

Pythonでインデックスの名前のリストを取得するにはどうすればよいですか?ここに私がこれまでに持っているものがあります:

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

この質問は、python-elasticsearchライブラリを使用してaliasesを取得するための情報を検索するときに発生します。受け入れられた答えはget_aliasesを使用するように言っていますが、その方法は削除されました(2017年現在)。 aliasesを取得するには、次を使用できます。

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

このクラスター内のすべてのインデックスのリストを取得する方法は?

ワイルドカードを使用します。 elasticsearch-pyで動作します。

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

get_alias() メソッドでそれを行う1つの方法を次に示します。

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

pyelasticsearchモジュール を使用する場合は、GET _mappingコマンド。クラスターのスキーマを作成します。これにより、インデックスを表示し、各インデックスにドリルしてdoc_typesとそのフィールドなどを表示できます。例を次に示します。

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

インデックスのリストのみを取得するには、

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"

これは この質問 に関連しています

3
travelingbones

Curlを使用して統計APIを呼び出し、インデックスに関する情報を取得します。次に、返されたJSONオブジェクトを解析して、インデックス名を見つけます。

curl localhost:9200/_stats

Pythonでは、リクエストライブラリを使用してcurlを呼び出すことができます。 ElasticsearchまたはElasticsearch-DSL Pythonライブラリを使用してこれを行う方法がわかりません。

2
MauricioRoman

そのようなことを行うことで、_mappingを取得してすべてのインデックスのリストを取得できます。

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