यदि आप 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
}
}
}
निष्पादक को इस ब्लॉग पोस्ट से हटा दिया जाता है जो निश्चित रूप से एक अच्छा पढ़ा जाता है यदि आप 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
इस अनुरोध के दायरे में होने । यदि आप इसके बिना इस कोड को संकलित करने का प्रयास करते हैं, तो आपको स्कैला संकलक से चेतावनी मिलेगी कि कैसे प्राप्त करें यदि आपके पास पहले से कोई आयात नहीं है।
मुझे दस्तावेज़ गणना की आवश्यकता थी, लेकिन अगर आपको वास्तव में केवल उन सूचकांकों के नामों की आवश्यकता है, जिन्हें आप मानचित्र की कुंजियों से खींच सकते हैं IndexStats
:
indicesStatsResponse.getIndices().keySet()
यह प्रश्न तब दिखाई देता है जब आप खोज कर रहे होते हैं कि यह कैसे करना है, भले ही आप इस प्रोग्राम को करने की कोशिश कर रहे हों, इसलिए मुझे आशा है कि यह किसी को भी स्कैला / जावा में ऐसा करने में मदद करता है। अन्यथा, कर्ल उपयोगकर्ता सिर्फ उतना ही कर सकते हैं जितना कि शीर्ष उत्तर कहता है और उपयोग करता है
curl http://localhost:9200/_aliases
curl http://localhost:9200/_stats/indexes\?pretty\=1