Список всех индексов на сервере ElasticSearch?

Я хотел бы перечислить все индексы, присутствующие на сервере ElasticSearch. Я пробовал это:

curl -XGET localhost:9200/

но это просто дает мне следующее:

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

Мне нужен список всех индексов.

Ответ 1

Чтобы получить краткий список всех индексов в вашем кластере, позвоните

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

Ответ 2

Попробуйте

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

Ответ 3

Вы можете запросить localhost:9200/_status, и это даст вам список индексов и информации о каждом из них. Ответ будет выглядеть примерно так:

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

Ответ 4

Команда _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

Как упражнение для себя, я написал небольшой плагин elasticsearch, предоставляющий функциональность для перечисления индексов elasticsearch без какой-либо другой информации. Вы можете найти его по следующему URL:

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

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

Ответ 5

Я использую это, чтобы получить все индексы:

$ 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

Чтобы получить третий столбец выше (имена индексов):

$ 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

Ответ 6

Я также рекомендовал бы делать /_cat/indices, который дает хороший читаемый пользователем список ваших индексов.

Ответ 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
    }}

Ответ 8

Я дам вам запрос, который вы можете запустить на кибане.

GET /_cat/indices?v

и версия CURL будет

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

Ответ 9

Самый простой способ получить список только индексов - использовать вышеприведенный ответ с параметром "h = index":

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

Ответ 10

_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" : { }
    }
  }
}

Ответ 11

Люди здесь ответили, как это сделать в завитке и смысле, некоторым людям, возможно, потребуется сделать это в java.

Здесь он идет

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

Ответ 12

Попробуйте этот API кошки: он предоставит вам список всех индексов со здоровьем и другими деталями.

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

Ответ 13

Я использую конечную точку _stats/indexes, чтобы получить json blob данных, а затем фильтр jq.

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

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

Если вам не нужны кавычки, добавьте флаг -r в jq.

Да, конечная точка indexes, а ключ данных indices, поэтому они не могли решить их:)

Мне нужно было это, чтобы очистить эти индексы мусора, созданные с помощью внутренней проверки безопасности (nessus).

PS. Я настоятельно рекомендую ознакомиться с jq, если вы собираетесь взаимодействовать с ES из командной строки.

Ответ 14

<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 + "]");
}

Ответ 15

У меня были Kibana и ES, установленные на машине. Но я не знал деталей (на каком пути или в порту) был узел ES на этой машине.

Итак, как вы можете это сделать из Кибаны (версия 5.6)?

  • Перейдите в Dev Tools
  • См. Раздел Консоль и выполните следующий запрос:

GET _cat/indices

Мне было интересно узнать размер конкретного индекса ES

Ответ 17

здесь другой способ просто увидеть индексы в 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"}

Ответ 18

Один из лучших способов отображения индексов + для отображения его статуса вместе со списком: просто выполнив ниже запрос.

Примечание: желательно использовать Sense для получения правильного вывода.

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

Выходной сигнал образца выглядит следующим образом. Основное преимущество заключается в том, что в нем в основном отображается имя индекса и его осколки, размер индекса и размер обложек ip и т.д.

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                                                 
...
...
...

Ответ 19

Если вы работаете в 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 является экземпляром Client, который может быть node или транспортным клиентом, в зависимости от ваших потребностей. Для этого запроса вам также понадобится неявный ExecutionContext. Если вы попытаетесь скомпилировать этот код без него, вы получите предупреждение от компилятора scala о том, как его получить, если у вас еще нет импортированного.

Мне понадобилось количество документов, но если вам действительно нужны имена индексов, вы можете вытащить их из ключей карты, а не из IndexStats:

indicesStatsResponse.getIndices().keySet()

Этот вопрос появляется, когда вы ищете, как это сделать, даже если вы пытаетесь сделать это программно, поэтому я надеюсь, что это поможет любому, кто хочет это сделать, в scala/java. В противном случае, завитые пользователи могут просто делать, как говорит верхний ответ, и использовать

curl http://localhost:9200/_aliases

Ответ 20

You can also get specific index using 

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"
      }
    }
  }
}
For more info [https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-index.html][1]

Ответ 22

Для Elasticsearch 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

Ответ 23

Чтобы получить список индексов, вы можете сделать: curl 'localhost: 9200/_cat/indices? V' Документация Elasticsearch