Nếu bạn đang làm việc trong scala, một cách để làm điều này và sử dụng Future
là tạo một RequestExecutor, sau đó sử dụng IndicesStatsRequestBuilder và ứng dụng khách quản trị để gửi yêu cầu của bạ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
}
}
}
Trình thực thi được nâng lên từ bài đăng trên blog này, đây chắc chắn là một bài đọc tốt nếu bạn đang cố gắng truy vấn ES theo chương trình và không thông qua curl. Bạn có cái này bạn có thể tạo một danh sách tất cả các chỉ mục khá dễ dàng như vậy:
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
là một phiên bản của Client có thể là nút hoặc máy khách vận chuyển, tùy theo nhu cầu của bạn. Bạn cũng cần phải có một ẩnExecutionContext
phạm vi cho yêu cầu này. Nếu bạn cố gắng biên dịch mã này mà không có mã thì bạn sẽ nhận được cảnh báo từ trình biên dịch scala về cách lấy mã đó nếu bạn chưa nhập mã.
Tôi cần số lượng tài liệu, nhưng nếu bạn thực sự chỉ cần tên của các chỉ số, bạn có thể kéo chúng từ các phím của bản đồ thay vì từ IndexStats
:
indicesStatsResponse.getIndices().keySet()
Câu hỏi này xuất hiện khi bạn đang tìm cách làm điều này ngay cả khi bạn đang cố gắng thực hiện việc này theo chương trình, vì vậy tôi hy vọng điều này sẽ giúp bất cứ ai muốn làm điều này trong scala / java. Mặt khác, người dùng curl chỉ có thể làm như câu trả lời hàng đầu nói và sử dụng
curl http://localhost:9200/_aliases
curl http://localhost:9200/_stats/indexes\?pretty\=1