หากคุณทำงานในสกาล่าวิธีการทำเช่นนี้และใช้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
}
}
}
ผู้ดำเนินการถูกยกขึ้นจากโพสต์บล็อกนี้ซึ่งเป็นการอ่านที่ดีถ้าคุณพยายามที่จะสืบค้น ES แบบเป็นโปรแกรมและไม่ผ่าน curl คุณมีสิ่งนี้คุณสามารถสร้างรายการดัชนีทั้งหมดได้อย่างง่ายดาย:
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
ขอบเขตสำหรับคำขอนี้ หากคุณพยายามคอมไพล์โค้ดนี้โดยไม่ใช้มันคุณจะได้รับคำเตือนจากคอมไพเลอร์สกาล่าว่าจะรับได้อย่างไรถ้าคุณยังไม่มีอิมปอร์ตอยู่แล้ว
ฉันต้องการจำนวนเอกสาร แต่ถ้าคุณต้องการชื่อดัชนีเพียงอย่างเดียวคุณสามารถดึงพวกเขาออกจากปุ่มของแผนที่แทนจากIndexStats
:
indicesStatsResponse.getIndices().keySet()
คำถามนี้ปรากฏขึ้นเมื่อคุณค้นหาวิธีการนี้แม้ว่าคุณจะพยายามทำสิ่งนี้โดยใช้โปรแกรมดังนั้นฉันหวังว่าสิ่งนี้จะช่วยให้ทุกคนที่ต้องการทำสิ่งนี้ใน scala / java มิฉะนั้นผู้ใช้งาน curl ก็สามารถทำได้ตามคำตอบยอดนิยมที่พูดและใช้งาน
curl http://localhost:9200/_aliases
curl http://localhost:9200/_stats/indexes\?pretty\=1