Si está trabajando en scala, una forma de hacer esto y usarlo Future
es crear un RequestExecutor, luego use IndicesStatsRequestBuilder y el cliente administrativo para enviar su solicitud.
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
}
}
}
El ejecutor se levanta de esta publicación de blog, que definitivamente es una buena lectura si está intentando consultar ES mediante programación y no mediante curl. Una vez que tenga esto, puede crear una lista de todos los índices con bastante facilidad de esta manera:
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
es una instancia de Cliente que puede ser un nodo o un cliente de transporte, según sus necesidades. También necesitarás tener un implícitoExecutionContext
alcance para esta solicitud. Si intenta compilar este código sin él, recibirá una advertencia del compilador scala sobre cómo obtenerlo si aún no tiene uno importado.
Necesitaba el recuento de documentos, pero si realmente solo necesita los nombres de los índices, puede extraerlos de las teclas del mapa en lugar de IndexStats
:
indicesStatsResponse.getIndices().keySet()
Esta pregunta aparece cuando está buscando cómo hacer esto, incluso si está tratando de hacer esto mediante programación, por lo que espero que esto ayude a cualquiera que busque hacer esto en scala / java. De lo contrario, los usuarios de curl pueden hacer lo que dice la respuesta principal y usar
curl http://localhost:9200/_aliases
curl http://localhost:9200/_stats/indexes\?pretty\=1