Future
Scala'da çalışıyorsanız, bunu yapmanın ve kullanmanın bir yolu bir RequestExecutor oluşturmaktır, ardından isteğinizi göndermek için IndicesStatsRequestBuilder ve yönetici istemcisini kullanın.
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
}
}
}
İcracı bu blog yazısından kaldırılır ve bu da kıvrımdan değil ES programlı olarak sorgulamaya çalışıyorsanız kesinlikle iyi bir okuma olur. Bu bir tane var gibi kolayca tüm dizinlerin bir listesini oluşturabilirsiniz:
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
bir düğüm veya aktarım istemcisi olabilen, hangisi ihtiyaçlarınıza uygun olursa olsun , İstemci örneğidir . Ayrıca ExecutionContext
, bu istek için örtük bir kapsamınızın olması gerekir . Bu kodu onsuz derlemeye çalışırsanız, önceden alınmış bir dosyanız yoksa, scala derleyicisinden bunu nasıl alacağınıza dair bir uyarı alırsınız.
Belge sayımına ihtiyacım vardı, ancak gerçekten sadece indekslerin adlarına ihtiyacınız varsa, bunları haritanın anahtarlarından çekebilirsiniz IndexStats
:
indicesStatsResponse.getIndices().keySet()
Bu soru, bunu programlı olarak yapmaya çalışsanız bile, bunu nasıl yapacağınızı ararken ortaya çıkıyor, bu yüzden umarım bu, scala / java'da bunu yapmak isteyen herkese yardımcı olur. Aksi takdirde, curl kullanıcıları en üstteki cevabın söylediği gibi kullanabilir ve kullanabilir
curl http://localhost:9200/_aliases
curl http://localhost:9200/_stats/indexes\?pretty\=1