Jika Anda bekerja di scala, cara untuk melakukan ini dan menggunakan Future
adalah membuat RequestExecutor, kemudian gunakan IndicesStatsRequestBuilder dan klien administratif untuk mengirimkan permintaan Anda.
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
}
}
}
Eksekutor diangkat dari posting blog ini yang pasti merupakan bacaan yang bagus jika Anda mencoba untuk meminta ES secara terprogram dan tidak melalui curl. Setelah Anda memilikinya, Anda dapat membuat daftar semua indeks dengan mudah seperti:
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
adalah turunan dari Klien yang dapat berupa simpul atau klien transportasi, mana yang sesuai dengan kebutuhan Anda. Anda juga harus memiliki ExecutionContext
ruang lingkup implisit untuk permintaan ini. Jika Anda mencoba untuk mengkompilasi kode ini tanpa itu maka Anda akan mendapatkan peringatan dari scala compiler tentang cara mendapatkannya jika Anda belum memiliki yang diimpor.
Saya membutuhkan jumlah dokumen, tetapi jika Anda benar-benar hanya membutuhkan nama indeks, Anda dapat menariknya dari kunci peta alih-alih dari IndexStats
:
indicesStatsResponse.getIndices().keySet()
Pertanyaan ini muncul ketika Anda mencari cara melakukan ini bahkan jika Anda mencoba melakukan ini secara terprogram, jadi saya harap ini membantu siapa pun yang ingin melakukan ini di scala / java. Jika tidak, pengguna ikal hanya dapat melakukan seperti yang dikatakan dan digunakan jawaban teratas
curl http://localhost:9200/_aliases
curl http://localhost:9200/_stats/indexes\?pretty\=1