scala で作業している場合、これを実行して を使用する方法Future
は、RequestExecutor を作成し、IndicesStatsRequestBuilderと管理クライアントを使用してリクエストを送信することです。
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
}
}
}
executor は、curl ではなくプログラムで ES にクエリを実行しようとしている場合は、間違いなく良い読み物であるこのブログ投稿から持ち上げられます。これがあれば、次のように非常に簡単にすべてのインデックスのリストを作成できます。
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
クライアントのインスタンスであり、ノードまたはトランスポート クライアントのどちらか必要に応じて使用できます。ExecutionContext
また、このリクエストの暗黙的な範囲も必要です。それなしでこのコードをコンパイルしようとすると、まだインポートされていない場合にそれを取得する方法について、scala コンパイラから警告が表示されます。
ドキュメント数が必要でしたが、本当にインデックスの名前だけが必要な場合は、 の代わりにマップのキーから取得できますIndexStats
。
indicesStatsResponse.getIndices().keySet()
この質問は、プログラムでこれを実行しようとしている場合でも、これを行う方法を検索しているときに表示されるため、scala/java でこれを実行しようとしている人に役立つことを願っています。それ以外の場合、カールユーザーは、一番上の回答が言うように実行して使用できます
curl http://localhost:9200/_aliases