Daftar semua indeks pada server ElasticSearch?

251

Saya ingin mendaftar semua indeks yang ada di server ElasticSearch. Saya mencoba ini:

curl -XGET localhost:9200/

tapi itu hanya memberi saya ini:

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

Saya ingin daftar semua indeks ..

Eva
sumber

Jawaban:

405

Untuk daftar ringkas semua indeks di kluster Anda, hubungi

curl http://localhost:9200/_aliases

ini akan memberi Anda daftar indeks dan alias mereka.

Jika Anda menginginkannya dicetak cantik, tambahkan pretty=true:

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

Hasilnya akan terlihat seperti ini, jika indeks Anda dipanggil old_deuteronomydan mungojerrie:

{
  "old_deuteronomy" : {
    "aliases" : { }
  },
  "mungojerrie" : {
    "aliases" : {
      "rumpleteazer" : { },
      "that_horrible_cat" : { }
    }
  }
}
karmi
sumber
5
@paweloque jawaban sekarang sepertinya itu solusi yang tepat; tampaknya lebih bersih. curl http://localhost:9200/_stats/indexes\?pretty\=1
notapatch
1
2 sen saya untuk daftar polos (non-json):curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron
Untuk Elasticsearch 6.5 dapat mencapai /statstitik akhir, atau titik akhir kesehatan dengan param_cluster/health?level=indices
Justin W.
curl localhost: 9200 / _cat / index? v bekerja untuk saya (di Elastis 6.2.4)
Matt L.
78

Mencoba

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

Ini akan memberi Anda mengikuti penjelasan sendiri dengan cara tabel

health index    pri rep docs.count docs.deleted store.size pri.store.size
yellow customer   5   1          0            0       495b           495b
Abhijit Mazumder
sumber
Menambahkan pipa untuk disortir membuat ini mudah untuk melihat apa yang sedang hijau. Juga perubahan store.size menunjukkan kemajuan tambahan.
kevpie
Anda juga dapat memilih dan memesan kolom yang menambahkan mis. & h = kesehatan, indeks serta urutkan dengan & s = kesehatan: desc
Georg Engel
33

Anda dapat meminta localhost:9200/_statusdan itu akan memberi Anda daftar indeks dan informasi tentang masing-masing. Responsnya akan terlihat seperti ini:

{
  "ok" : true,
  "_shards" : { ... },
  "indices" : {
    "my_index" : { ... },
    "another_index" : { ... }
  }
}
Matthew Boynes
sumber
3
Jika Anda hanya ingin tahu daftar nama indeks maka pendekatan ini terlalu banyak dan lebih lambat. Penggunaan yang lebih baik -GET /_stats/indexes
async Tunggu
4
@asyncwait saya akan merekomendasikan /_stats/indiceskarena ini adalah jamak yang benar dan juga kunci yang digunakan dalam /_statusdan dalam /_stats.
Nicholas Shanks
2
Tampaknya tidak menjadi URL yang valid lagi di versi 5.6.
The Unknown Dev
1
Titik akhir API telah berubah menjadi _nodes/statsdan _nodes/status@KimberlyW
maxymoo
Dihentikan dalam 1.2.0.
jarmod
26

Perintah _stats menyediakan cara untuk menyesuaikan hasil dengan menentukan metrik yang diinginkan. Untuk mendapatkan indeks, kueri adalah sebagai berikut:

GET /_stats/indices

Format umum dari _statskueri adalah:

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

Di mana metrik berada:

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

Sebagai latihan untuk diri saya sendiri, saya telah menulis sebuah plugin elasticsearch kecil yang menyediakan fungsionalitas untuk membuat daftar indeks elasticsearch tanpa informasi lain. Anda dapat menemukannya di url berikut:

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

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

paweloque
sumber
2
Tidak berfungsi:"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
Ivan Yurchenko
@IvanYurchenko Saya sudah menerapkan plugin elasticsearch saya sejak lama. Sangat mungkin API telah berubah sejak itu dan tidak berfungsi lagi .. Yang terbaik adalah menggunakan perintah '_aliases'. Ini juga akan memberikan informasi tentang semua indeks dalam elasticsearch.
paweloque
18

Saya menggunakan ini untuk mendapatkan semua indeks:

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

Dengan daftar ini Anda dapat mengerjakan ...

Contoh

$ 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

Untuk mendapatkan kolom ke-3 di atas (nama-nama indeks):

$ 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

CATATAN: Anda juga dapat menggunakan awk '{print $3}'sebagai ganti cut -d\ -f3.

Tajuk Kolom

Anda juga bisa mengakhiri sufiks dengan ?vmenambahkan kolom tajuk. Melakukannya akan merusak cut...metode jadi saya akan merekomendasikan menggunakan awk..seleksi pada titik ini.

$ 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
tidak diketahui
sumber
1
curl -s 'http://localhost:9200/_cat/indices?h=index'akan mencetak hanya nama indeks. Tidak perlu menggunakan trik shell untuk menyaring kolom.
hgf
Anda tidak hanya dapat menggunakan awk, Anda harus menggunakan awk (atau gunakan tr -s ' 'sebelumnya cutuntuk menyingkat run spasi) atau Anda tidak akan mendapatkan nama indeks jika statusnya redkarena akan diisi dengan spasi dan cutmemperlakukan setiap ruang individu sebagai pembatasan sebuah bidang baru bahkan jika "bidang" itu berakhir kosong
kbolino
11

Saya juga merekomendasikan melakukan / _cat / indeks yang memberikan daftar indeks yang dapat dibaca manusia.

Matt Watson
sumber
8

Cara paling sederhana untuk mendapatkan daftar hanya indeks adalah dengan menggunakan jawaban di atas, dengan parameter 'h = indeks':

curl -XGET "localhost:9200/_cat/indices?h=index"
J. Lewis
sumber
7

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

Ini akan menampilkan seperti di bawah ini

{
  "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
    }}
PShetty
sumber
Semua titik akhir lainnya tidak berfungsi untuk saya. Jawaban Anda berhasil! Terima kasih. Lihat stackoverflow.com/questions/49204526/…
arun
Saya juga, apakah ini versi yang lebih baru. Jawaban utama tampaknya bekerja pada 2.x tetapi tidak 6.x
Andrew Jon Dodds
5

Saya akan memberi Anda kueri yang bisa Anda jalankan di kibana.

GET /_cat/indices?v

dan versi CURL akan menjadi

CURL -XGET http://localhost:9200/_cat/indices?v
Pinkesh Sharma
sumber
5
You may use this command line.

curl -X DAPATKAN "localhost: 9200 / _cat / indeks? v"

Untuk lebih banyak (Situs Resmi Elasticsearch)

Yagnesh bhalala
sumber
3

Untuk daftar indeks yang dapat Anda lakukan: curl 'localhost: 9200 / _cat / index? V' Elasticsearch Documentation

kartikcr
sumber
3

Mengakses Pencarian Elastis Terjamin melalui Curl (Pembaruan 2020)

Jika Elastic Searchdiamankan, Anda dapat menggunakan perintah ini untuk mendaftar indeks

curl http://username:password@localhost:9200/_aliases?pretty=true
memukul ceri
sumber
2

_stats/indicesmemberikan hasilnya dengan indices.

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

Orang-orang di sini telah menjawab bagaimana melakukannya dalam ikal dan pengertian, beberapa orang mungkin perlu melakukan ini di java.

Ini dia

client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
Avinash Kumar Pandey
sumber
2

Untuk Elasticsearch 6.X, saya menemukan yang berikut ini yang paling membantu. Masing-masing memberikan data yang berbeda dalam respons.

# 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
Justin W.
sumber
2

Anda juga bisa mendapatkan indeks spesifik menggunakan

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"
      }
    }
  }
}

Untuk info lebih lanjut

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

Yagnesh bhalala
sumber
1

inilah cara lain hanya untuk melihat indeks di 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"}
TheodoreC
sumber
1

Salah satu cara terbaik untuk mendaftar indeks + untuk menampilkan statusnya bersama dengan daftar: adalah dengan hanya menjalankan kueri di bawah ini.

Catatan: sebaiknya gunakan Sense untuk mendapatkan output yang tepat.

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

Output sampel adalah sebagai berikut. Keuntungan utama adalah, pada dasarnya menunjukkan nama indeks dan pecahan itu disimpan ke dalam, ukuran indeks dan pecahan ip dll

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                                                 
...
...
...
Ritesh Aryal
sumber
1

Saya menggunakan _stats/indexestitik akhir untuk mendapatkan gumpalan data json dan kemudian menyaring dengan jq .

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

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

Jika Anda tidak ingin kutipan, tambahkan -rbendera ke jq.

Ya, titik akhir adalah indexesdan kunci data adalah indices, jadi mereka juga tidak dapat mengambil keputusan :)

Saya perlu ini untuk membersihkan indeks sampah yang dibuat oleh pemindaian keamanan internal (nessus).

PS. Saya sangat merekomendasikan untuk mengenal jq jika Anda akan berinteraksi dengan ES dari baris perintah.

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

API Java

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 + "]");
}
StanislavKo
sumber
Anda dapat memberikan beberapa penjelasan untuk kode tersebut, dan membuat jawabannya sedikit lebih mudah dibaca ... Bagaimana Menjawab
AgataB
1

Jika Anda bekerja di scala, cara untuk melakukan ini dan menggunakan Futureadalah 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
    }
}

clientadalah turunan dari Klien yang dapat berupa simpul atau klien transportasi, mana yang sesuai dengan kebutuhan Anda. Anda juga harus memiliki ExecutionContextruang 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
EdgeCaseBerg
sumber
1

Anda dapat mencoba perintah ini

curl -X DAPATKAN http: // localhost: 9200 / _cat / index? v

dat nguyen
sumber
1
Halo, hanya catatan singkat. Ini telah ditentukan dalam jawaban di atas hampir 3 kali. Tolong jangan memposting jawaban berulang yang telah diberikan kecuali Anda bermaksud mengedit ini dan menambahkan beberapa informasi yang belum diposting sebelumnya di jawaban sebelumnya. Saya harap saya tidak mengecewakan Anda, tetapi ini untuk memastikan bahwa semua pertanyaan dan jawaban tidak akan diduplikasi dan berulang.
Opster ES Ninja - Kamal
1

Saya sudah menginstal Kibana dan ES di mesin. Tapi saya tidak tahu detailnya (di jalur apa, atau port) adalah simpul ES pada mesin itu.

Jadi bagaimana Anda bisa melakukannya dari Kibana (versi 5.6)?

  • Pergi ke Alat Dev
  • Lihat bagian Konsol , dan jalankan kueri berikut:

GET _cat/indices

Saya tertarik menemukan ukuran indeks ES tertentu

Razvang
sumber
0

Jika Anda memiliki curl yang diinstal pada sistem Anda, maka coba perintah sederhana ini: curl -XGET xx.xx.xx.xx: 9200 / _cat / indexes? V

Perintah yang disebutkan di atas memberi Anda hasil dalam format ini: hasil untuk mengambil semua indeks

Ranjan Singh
sumber