ElasticSearch सर्वर पर सभी अनुक्रमित सूची?


251

मैं एक लोचदार खोज सर्वर पर मौजूद सभी अनुक्रमितों को सूचीबद्ध करना चाहूंगा। मैंने यह कोशिश की:

curl -XGET localhost:9200/

लेकिन यह सिर्फ मुझे यह देता है:

{
  "ok" : true,
  "status" : 200,
  "name" : "El Aguila",
  "version" : {
    "number" : "0.19.3",
    "snapshot_build" : false
  },
  "tagline" : "You Know, for Search"
}

मुझे सभी इंडेक्स की सूची चाहिए ..

जवाबों:


407

अपने क्लस्टर में सभी सूचकांकों की संक्षिप्त सूची के लिए, कॉल करें

curl http://localhost:9200/_aliases

यह आपको सूचकांकों और उनके उपनामों की एक सूची देगा।

यदि आप इसे सुंदर-मुद्रित चाहते हैं, तो जोड़ें pretty=true:

curl http://localhost:9200/_aliases?pretty=true

परिणाम कुछ इस तरह दिखेगा, यदि आपके सूचकांक को बुलाया जाता है old_deuteronomyऔर mungojerrie:

{
  "old_deuteronomy" : {
    "aliases" : { }
  },
  "mungojerrie" : {
    "aliases" : {
      "rumpleteazer" : { },
      "that_horrible_cat" : { }
    }
  }
}

5
@paweloque उत्तर अब लगता है कि यह सही समाधान है; साफ लगता है। curl http://localhost:9200/_stats/indexes\?pretty\=1
notapatch

1
एक सादे (नॉन-जॉसन) सूची के लिए मेरे 2 सेंट:curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
यारोन

Elasticsearch 6.5 के लिए या तो /statsसमापन बिंदु, या परम के साथ स्वास्थ्य समापन बिंदु मारा_cluster/health?level=indices
जस्टिन डब्ल्यू।

कर्ल लोकलहोस्ट: 9200 / _कैट / सूचकांकों? मेरे लिए काम किया है (लोचदार 6.2.4 पर)
मैट एल।

78

प्रयत्न

curl 'localhost:9200/_cat/indices?v'

यह आपको सारणीबद्ध तरीके से आत्म व्याख्यात्मक आउटपुट के बाद देगा

health index    pri rep docs.count docs.deleted store.size pri.store.size
yellow customer   5   1          0            0       495b           495b

सॉर्ट करने के लिए एक पाइप को जोड़ने से यह देखना आसान हो गया कि क्या हरे रंग की जा रही थी। इसके अलावा store.size बदलते ने अतिरिक्त प्रगति का संकेत दिया।
केवपी

आप उदाहरण के लिए & h = स्वास्थ्य, इंडेक्स के साथ-साथ & s = स्वास्थ्य: desc
Georg Engel

33

आप क्वेरी कर सकते हैं localhost:9200/_statusऔर यह आपको प्रत्येक के बारे में सूचकांकों और सूचनाओं की एक सूची देगा। प्रतिक्रिया कुछ इस तरह दिखाई देगी:

{
  "ok" : true,
  "_shards" : { ... },
  "indices" : {
    "my_index" : { ... },
    "another_index" : { ... }
  }
}

3
यदि आप केवल सूचकांक नामों की सूची जानना चाहते हैं तो यह दृष्टिकोण बहुत अधिक और धीमा है। बेहतर उपयोग -GET /_stats/indexes
asyncwait

4
@asyncwait मैं इसकी सिफारिश करूंगा /_stats/indicesक्योंकि यह सही बहुवचन है और इसमें इस्तेमाल की जाने वाली कुंजी भी /_statusहै /_stats
निकोलस शैंक्स

2
5.6 संस्करण पर अब एक वैध URL नहीं लगता है।
अज्ञात देव

1
एपीआई एंडपॉइंट बदल गया है _nodes/statsऔर _nodes/status@ किम्बरली
मैक्सिमम

1.2.0 में पदावनत।
jarmod

26

_Stats कमांड मेट्रिक्स की इच्छा को निर्दिष्ट करके परिणामों को अनुकूलित करने के तरीके प्रदान करता है। सूचकांक प्राप्त करने के लिए क्वेरी निम्नानुसार है:

GET /_stats/indices

_statsक्वेरी का सामान्य प्रारूप है:

/_stats
/_stats/{metric}
/_stats/{metric}/{indexMetric}
/{index}/_stats
/{index}/_stats/{metric}

जहां मैट्रिक्स हैं:

indices, docs, store, indexing, search, get, merge, 
refresh, flush, warmer, filter_cache, id_cache, 
percolate, segments, fielddata, completion

खुद के लिए एक अभ्यास के रूप में, मैंने एक छोटी इलास्टिक्स खोज प्लगइन लिखा है जो किसी अन्य जानकारी के बिना इलास्टिसर्च सूचकांकों को सूचीबद्ध करने के लिए कार्यक्षमता प्रदान करता है। आप इसे निम्न यूआरएल पर पा सकते हैं:

http://blog.iterativ.ch/2014/04/11/listindices-writing-your-first-elasticsearch-java-plugin/

https://github.com/iterativ/elasticsearch-listindices


2
काम नहीं करता है:"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
इवान युर्चेंको

@IvanYurchenko मैंने बहुत पहले अपना इलास्टिक्स खोज प्लगइन लागू किया है। बहुत संभव है कि एपीआई बदल गए हैं और यह अब काम नहीं करता है .. सबसे अच्छा है '_aliases' कमांड का उपयोग करना। यह इलास्टिसर्च में सभी सूचकांकों के बारे में जानकारी भी प्रदान करेगा।
पावेलोके

18

मैं सभी सूचकांकों को प्राप्त करने के लिए इसका उपयोग करता हूं:

$ curl --silent 'http://127.0.0.1:9200/_cat/indices' | cut -d\  -f3

इस सूची के साथ आप पर काम कर सकते हैं ...

उदाहरण

$ curl -s 'http://localhost:9200/_cat/indices' | head -5
green open qa-abcdefq_1458925279526           1 6       0     0   1008b    144b
green open qa-test_learnq_1460483735129    1 6       0     0   1008b    144b
green open qa-testimportd_1458925361399       1 6       0     0   1008b    144b
green open qa-test123p_reports                1 6 3868280 25605   5.9gb 870.5mb
green open qa-dan050216p_1462220967543        1 6       0     0   1008b    144b

ऊपर 3 कॉलम प्राप्त करने के लिए (सूचकांकों के नाम):

$ curl -s 'http://localhost:9200/_cat/indices' | head -5 | cut -d\  -f3
qa-abcdefq_1458925279526
qa-test_learnq_1460483735129
qa-testimportd_1458925361399
qa-test123p_reports
qa-dan050216p_1462220967543

नोट: आप भी उपयोग कर सकते हैं awk '{print $3}'के बजाय cut -d\ -f3

कॉलम हेडर

?vकॉलम हेडर जोड़ने के लिए आप क्वेरी के साथ प्रत्यय भी लगा सकते हैं । ऐसा करने से cut...विधि टूट जाएगी इसलिए मैं awk..इस बिंदु पर चयन का उपयोग करने की सलाह दूंगा ।

$ curl -s 'http://localhost:9200/_cat/indices?v' | head -5
health status index                              pri rep docs.count docs.deleted store.size pri.store.size
green  open   qa-abcdefq_1458925279526             1   6          0            0      1008b           144b
green  open   qa-test_learnq_1460483735129      1   6          0            0      1008b           144b
green  open   qa-testimportd_1458925361399         1   6          0            0      1008b           144b
green  open   qa-test123p_reports                  1   6    3868280        25605      5.9gb        870.5mb

1
curl -s 'http://localhost:9200/_cat/indices?h=index'केवल सूचकांक नाम का प्रिंट आउट लेगा। कॉलम को फ़िल्टर करने के लिए शेल ट्रिक का उपयोग करने की आवश्यकता नहीं है।
hgf

न केवल आप awk का उपयोग कर सकते हैं, आपको awk का उपयोग करना चाहिए (या रिक्त स्थान के रन करने tr -s ' 'से पहले उपयोग करें cut) या अन्यथा आपको इंडेक्स नाम नहीं मिलेगा यदि स्थिति redइसलिए है क्योंकि यह रिक्त स्थान के साथ गद्देदार होगा और cutप्रत्येक व्यक्ति को परिसीमन के रूप में मानता है एक नया फ़ील्ड भले ही "फ़ील्ड" खाली हो
kbolino

11

मैं ऐसा करने की सिफारिश भी करूंगा / _cat / indices जो आपके सूचकांक की एक अच्छी मानव पठनीय सूची देता है।


8

केवल अनुक्रमणिका की सूची प्राप्त करने का सबसे सरल तरीका है कि 'h = index' पैरामीटर के साथ, उपरोक्त उत्तर का उपयोग करें:

curl -XGET "localhost:9200/_cat/indices?h=index"

7

curl -XGET 'http://localhost:9200/_cluster/health?level=indices'

यह नीचे की तरह आउटपुट देगा

{
  "cluster_name": "XXXXXX:name",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 3,
  "number_of_data_nodes": 3,
  "active_primary_shards": 199,
  "active_shards": 398,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100,
  "indices": {
    "logstash-2017.06.19": {
      "status": "green",
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "active_primary_shards": 3,
      "active_shards": 6,
      "relocating_shards": 0,
      "initializing_shards": 0,
      "unassigned_shards": 0
    },
    "logstash-2017.06.18": {
      "status": "green",
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "active_primary_shards": 3,
      "active_shards": 6,
      "relocating_shards": 0,
      "initializing_shards": 0,
      "unassigned_shards": 0
    }}

अन्य सभी समापन बिंदु मेरे लिए काम नहीं करते थे। आपका जवाब काम कर गया! धन्यवाद। देखें stackoverflow.com/questions/49204526/…
arun

मुझे भी, यह एक नया संस्करण है। मुख्य उत्तर 2.x पर काम करने लगते हैं, लेकिन 6.x पर नहीं
एंड्रयू जॉन डोड्स

5

मैं आपको वह क्वेरी दूंगा जिसे आप किबाना पर चला सकते हैं।

GET /_cat/indices?v

और CURL संस्करण होगा

CURL -XGET http://localhost:9200/_cat/indices?v


3

उन सूचकांकों को सूचीबद्ध करने के लिए जो आप कर सकते हैं: कर्ल 'लोकलहोस्ट: 9200 / _कैट / इंडेक्स? वी' एलिस्टिक्स खोज


3

हालांकि कर्ल को सुरक्षित खोज को एक्सेस करना (अपडेट 2020)

तो Elastic Searchसुरक्षित है, आप सूची सूचकांक करने के लिए इस आदेश का उपयोग कर सकते हैं

curl http://username:password@localhost:9200/_aliases?pretty=true

2

_stats/indicesके साथ परिणाम देता है indices

$ curl -XGET "localhost:9200/_stats/indices?pretty=true"
{
  "_shards" : {
    "total" : 10,
    "successful" : 5,
    "failed" : 0
  },
  "_all" : {
    "primaries" : { },
    "total" : { }
  },
  "indices" : {
    "visitors" : {
      "primaries" : { },
      "total" : { }
    }
  }
}

2

यहां लोगों ने उत्तर दिया है कि इसे कर्ल और अर्थ में कैसे किया जाए, कुछ लोगों को जावा में ऐसा करने की आवश्यकता हो सकती है।

ये रहा

client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()


2

इलास्टिक्स खोज 6.X के लिए, मुझे निम्नलिखित सबसे अधिक उपयोगी लगा। प्रत्येक प्रतिक्रिया में अलग-अलग डेटा प्रदान करता है।

# more verbose
curl -sS 'localhost:9200/_stats' | jq -C ".indices" | less

# less verbose, summary
curl -sS 'localhost:9200/_cluster/health?level=indices' | jq -C ".indices" | less

2

आप विशिष्ट इंडेक्स का उपयोग करके भी प्राप्त कर सकते हैं

curl -X GET "localhost:9200/<INDEX_NAME>"
e.g.   curl -X GET "localhost:9200/twitter"
You may get output like:
{
  "twitter": {
     "aliases": { 

     },
     "mappings": { 

     },
     "settings": {
     "index": {
        "creation_date": "1540797250479",
        "number_of_shards": "3",
        "number_of_replicas": "2",
        "uuid": "CHYecky8Q-ijsoJbpXP95w",
        "version": {
            "created": "6040299"
        },
       "provided_name": "twitter"
      }
    }
  }
}

अधिक जानकारी के लिए

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-index.html


1

यहाँ एक और तरीका है सिर्फ db में सूचकांक देखने के लिए:

curl -sG somehost-dev.example.com:9200/_status --user "credentials:password" | sed 's/,/\n/g' | grep index | grep -v "size_in" | uniq


{ "index":"tmpdb"}

{ "index":"devapp"}

1

सूची के साथ एक साथ अपनी स्थिति प्रदर्शित करने के लिए सूचकांकों को सूचीबद्ध करने का सबसे अच्छा तरीका है: बस नीचे क्वेरी को निष्पादित करना है।

नोट: उचित उत्पादन प्राप्त करने के लिए अधिमानतः नब्ज का उपयोग करें।

curl -XGET 'http://localhost:9200/_cat/shards'

नमूना आउटपुट नीचे है। मुख्य लाभ यह है, यह मूल रूप से सूचकांक नाम और इसे सहेजे गए शार्प्स, इंडेक्स साइज और शार्प्स आई पी आदि को दर्शाता है

index1     0 p STARTED     173650  457.1mb 192.168.0.1 ip-192.168.0.1 
index1     0 r UNASSIGNED                                                 
index2     1 p STARTED     173435  456.6mb 192.168.0.1 ip-192.168.0.1 
index2     1 r UNASSIGNED                                                 
...
...
...

1

मैं _stats/indexesडेटा का एक jbb प्राप्त करने के लिए समापन बिंदु का उपयोग करता हूं और फिर jq के साथ फ़िल्टर करता हूं

curl 'localhost:9200/_stats/indexes' | jq '.indices | keys | .[]'

"admin"
"blazeds"
"cgi-bin"
"contacts_v1"
"flex2gateway"
"formmail"
"formmail.pl"
"gw"
...

यदि आप उद्धरण नहीं चाहते हैं, तो -rjq में एक ध्वज जोड़ें ।

हां, समापन बिंदु है indexesऔर डेटा कुंजी है indices, इसलिए वे या तो अपना मन नहीं बना सकते हैं :)

आंतरिक सुरक्षा स्कैन (नेसस) द्वारा बनाए गए इन कचरा सूचकांकों को साफ करने के लिए मुझे इसकी आवश्यकता थी।

पुनश्च। अगर आप कमांड लाइन से ES के साथ बातचीत करने जा रहे हैं तो मैं jq से परिचित होने की सलाह देता हूं ।


1
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.4.0</version>
</dependency>

जावा एपीआई

Settings settings = Settings.settingsBuilder().put("cluster.name", Consts.ES_CLUSTER_NAME).build();
TransportClient client = TransportClient.builder().settings(settings).build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("52.43.207.11"), 9300));
IndicesAdminClient indicesAdminClient = client.admin().indices();
GetIndexResponse getIndexResponse = indicesAdminClient.getIndex(new GetIndexRequest()).get();
for (String index : getIndexResponse.getIndices()) {
    logger.info("[index:" + index + "]");
}

आप कोड के लिए कुछ स्पष्टीकरण दे सकते हैं, और उत्तर को थोड़ा अधिक पठनीय बना सकते हैं ... उत्तर कैसे दें
AgataB

1

यदि आप scala में काम कर रहे हैं, तो ऐसा करने का एक तरीका और FutureRequestExecutor बनाना है, तो अपना अनुरोध सबमिट करने के लिए 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

1

आप इस कमांड को आज़मा सकते हैं

कर्ल -X GET http: // localhost: 9200 / _cat / indices? v


1
हैलो, बस एक त्वरित नोट। यह उपरोक्त उत्तर में 3 बार के करीब निर्दिष्ट किया गया है। कृपया दोहराए गए उत्तर न दें जो पहले ही दिए जा चुके हैं जब तक आप इसे संपादित करने और कुछ और जानकारी जोड़ने का इरादा नहीं रखते हैं जो पहले के उत्तर में पहले पोस्ट नहीं किया गया है। मुझे आशा है कि मैं आपको हतोत्साहित नहीं कर रहा हूं, लेकिन यह सुनिश्चित करना है कि सभी प्रश्न और उत्तर दोहराव और दोहराव नहीं मिलेंगे।
ओपस्टर ईएस निंजा - कमल

1

मैं Kibana और ES एक मशीन पर स्थापित किया था। लेकिन मुझे यह नहीं पता था कि उस मशीन पर ES नोड क्या है (किस पथ, या बंदरगाह पर)।

तो आप इसे किबाना (संस्करण 5.6) से कैसे कर सकते हैं?

  • देव टूल्स पर जाएं
  • कंसोल अनुभाग देखें , और निम्न क्वेरी चलाएँ:

GET _cat/indices

मैं एक विशेष ES इंडेक्स का आकार खोजने में रुचि रखता था


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.