Se você estiver trabalhando no scala, uma maneira de fazer isso e usar Future
é criar um RequestExecutor, use o IndicesStatsRequestBuilder e o cliente administrativo para enviar sua solicitação.
import org.elasticsearch.action.{ ActionRequestBuilder, ActionListener, ActionResponse }
import scala.concurrent.{ Future, Promise, blocking }
/** Convenice wrapper for creating RequestExecutors */
object RequestExecutor {
def apply[T <: ActionResponse](): RequestExecutor[T] = {
new RequestExecutor[T]
}
}
/** Wrapper to convert an ActionResponse into a 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
}
}
}
O executor é retirado desta postagem do blog, que é definitivamente uma boa leitura, se você estiver tentando consultar o ES de forma programática e não através de curl. Se você tiver isso, poderá criar uma lista de todos os índices facilmente, assim:
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
é uma instância do cliente que pode ser um nó ou um cliente de transporte, conforme a sua necessidade. Você também precisará ter um ExecutionContext
escopo implícito para esta solicitação. Se você tentar compilar esse código sem ele, receberá um aviso do compilador scala sobre como obtê-lo se ainda não tiver um importado.
Eu precisava da contagem de documentos, mas se você realmente precisar apenas dos nomes dos índices, poderá extraí-los das chaves do mapa em vez de IndexStats
:
indicesStatsResponse.getIndices().keySet()
Essa pergunta aparece quando você está pesquisando como fazer isso, mesmo que esteja tentando fazer isso programaticamente, por isso espero que ajude quem quiser fazer isso no scala / java. Caso contrário, os usuários de curl podem fazer o que a resposta principal diz e usar
curl http://localhost:9200/_aliases
curl http://localhost:9200/_stats/indexes\?pretty\=1