394 Stimmen

Liste alle Indizes auf dem ElasticSearch-Server auf?

Ich möchte alle Indizes auflisten, die auf einem ElasticSearch-Server vorhanden sind. Ich habe es damit versucht:

curl -XGET localhost:9200/

aber es gibt mir nur dies zurück:

{
  "ok" : true,
  "status" : 200,
  "name" : "El Aguila",
  "version" : {
    "number" : "0.19.3",
    "snapshot_build" : false
  },
  "tagline" : "Du weißt, wofür man sucht"
}

Ich möchte eine Liste aller Indizes...

2voto

prayagupa Punkte 28548

_stats/indices gibt das Ergebnis mit indices zurück.

$ curl -XGET "localhost:9200/_stats/indices?pretty=true"
{
  "_shards" : {
    "total" : 10,
    "successful" : 5,
    "failed" : 0
  },
  "_all" : {
    "primaries" : { },
    "total" : { }
  },
  "indices" : {
    "visitors" : {
      "primaries" : { },
      "total" : { }
    }
  }
}

2voto

Menschen haben hier geantwortet, wie man es mit curl und Sense macht, manche Leute müssen dies vielleicht in Java tun.

Los geht's

client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()

2voto

Ritesh Aryal Punkte 745

Eine der besten Möglichkeiten, Indizes aufzulisten und ihren Status zusammen mit der Liste anzuzeigen, besteht darin, einfach die folgende Abfrage auszuführen.

Hinweis: Verwenden Sie vorzugsweise Sense, um die korrekte Ausgabe zu erhalten.

curl -XGET 'http://localhost:9200/_cat/shards'

Das Beispiel-Ausgabe sieht wie folgt aus. Der Hauptvorteil besteht darin, dass er den Indexnamen und die darin gespeicherten Shards, die Indexgröße und die Shard-IP usw. zeigt.

index1     0 p STARTED     173650  457.1mb 192.168.0.1 ip-192.168.0.1 
index1     0 r UNASSIGNED                                                 
index2     1 p STARTED     173435  456.6mb 192.168.0.1 ip-192.168.0.1 
index2     1 r UNASSIGNED                                                 
...
...
...

1voto

StanislavKo Punkte 335
    org.elasticsearch
    elasticsearch
    2.4.0

Java API

Settings settings = Settings.settingsBuilder().put("cluster.name", Consts.ES_CLUSTER_NAME).build();
TransportClient client = TransportClient.builder().settings(settings).build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("52.43.207.11"), 9300));
IndicesAdminClient indicesAdminClient = client.admin().indices();
GetIndexResponse getIndexResponse = indicesAdminClient.getIndex(new GetIndexRequest()).get();
for (String index : getIndexResponse.getIndices()) {
    logger.info("[index:" + index + "]");
}

1voto

EdgeCaseBerg Punkte 2681

Wenn Sie in Scala arbeiten, ist eine Möglichkeit, dies zu tun und Futures zu verwenden, die Erstellung eines RequestExecutor, dann die Verwendung des IndicesStatsRequestBuilder und des administrativen Clients, um Ihre Anfrage zu senden.

import org.elasticsearch.action.{ ActionRequestBuilder, ActionListener, ActionResponse }
import scala.concurrent.{ Future, Promise, blocking }

/** Bequeme Wrapper für die Erstellung von RequestExecutors */
object RequestExecutor {
    def apply[T <: ActionResponse](): RequestExecutor[T] = {
        new RequestExecutor[T]
    }
}

/** Wrapper zum Konvertieren einer ActionResponse in ein Scala Future
 *
 *  @see http://chris-zen.github.io/software/2015/05/10/elasticsearch-with-scala-and-akka.html
 */
class RequestExecutor[T <: ActionResponse] extends ActionListener[T] {
    private val promise = Promise[T]()

    def onResponse(response: T) {
        promise.success(response)
    }

    def onFailure(e: Throwable) {
        promise.failure(e)
    }

    def execute[RB <: ActionRequestBuilder[_, T, _, _]](request: RB): Future[T] = {
        blocking {
            request.execute(this)
            promise.future
        }
    }
}

Der Executor stammt aus diesem Blog-Beitrag, der auf jeden Fall lesenswert ist, wenn Sie versuchen, ES programmgesteuert abzufragen und nicht über Curl. Wenn Sie dies haben, können Sie eine Liste aller Indizes recht einfach erstellen, wie folgt:

def totalCountsByIndexName(): Future[List[(String, Long)]] = {
    import scala.collection.JavaConverters._
    val statsRequestBuider = new IndicesStatsRequestBuilder(client.admin().indices())
    val futureStatResponse = RequestExecutor[IndicesStatsResponse].execute(statsRequestBuider)
    futureStatResponse.map { indicesStatsResponse =>
        indicesStatsResponse.getIndices().asScala.map {
            case (k, indexStats) => {
                val indexName = indexStats.getIndex()
                val totalCount = indexStats.getTotal().getDocs().getCount()
                    (indexName, totalCount)
                }
        }.toList
    }
}

client ist eine Instanz von Client, der ein Knoten oder ein Transportclient sein kann, je nach Ihren Bedürfnissen. Sie müssen auch implizit einen ExecutionContext im Scope für diese Anfrage haben. Wenn Sie diesen Code ohne importierten ExecutionContext kompilieren möchten, erhalten Sie eine Warnung vom Scala-Compiler, wie Sie diesen erhalten können, wenn Sie ihn nicht bereits importiert haben.

Ich benötigte die Dokumentenzahl, aber wenn Sie wirklich nur die Namen der Indizes benötigen, können Sie sie aus den Schlüsseln der Karte anstelle von IndexStats erhalten:

indicesStatsResponse.getIndices().keySet()

Diese Frage taucht auf, wenn Sie suchen, wie Sie dies auch programmgesteuert machen können, also hoffe ich, dass dies allen hilft, die dies in Scala/Java machen möchten. Andernfalls können Curl-Benutzer einfach wie in der Top-Antwort beschrieben vorgehen und

curl http://localhost:9200/_aliases

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X