Elasticsearch使用Java客户端查找所有索引

时间:2015-10-14 20:23:57

标签: java elasticsearch

有没有办法使用Java客户端获取Elasticsearch中的索引列表?我已经能够找到使用Marvel / Sense执行此操作的示例,但我似乎无法找到使用Java客户端执行此操作的任何示例。

7 个答案:

答案 0 :(得分:12)

这绝对是可能的,但遗憾的是,它没有记录在Java客户端的官方文档中。您可以通过以下方式实现此目的:

List<IndexMetaData> indices = client.admin().cluster()
    .prepareState().get().getState()
    .getMetaData().getIndices();

答案 1 :(得分:10)

我发现这样做的另一种方式:

client.admin()
    .indices()
    .getIndex(new GetIndexRequest())
    .actionGet()
    .getIndices()

答案 2 :(得分:3)

Elasticsearch 6.5,RestHighLevelClient:

ClusterHealthRequest request = new ClusterHealthRequest();
ClusterHealthResponse response = client.cluster().health(request, RequestOptions.DEFAULT);
Set<String> indices = response.getIndices().keySet();

答案 3 :(得分:0)

这也适用于Elasticsearch 6.2.3和java API-client 6.2.3:

String[] indices = client.admin().indices().prepareGetIndex().setFeatures().get().getIndices();

答案 4 :(得分:0)

对于RestHighLevelClient

尝试使用:/_cat/indices?h=i

InputStream inputStream = restHighLevelClient.getLowLevelClient()
.performRequest("GET", "/_cat/indices?h=i")
.getHttpResponse()
.getEntity()
.getContent();

List<String> indexes = new BufferedReader(new InputStreamReader(inputStream))
    .lines()
    .collect(Collectors.toList());

此外,如果您要使用正则表达式进行搜索:/_cat/indices?h=i&index=test*

答案 5 :(得分:0)

我正在使用客户端版本6.8.0,并且能够获得如下索引:

GetIndexRequest getIndexRequest = new GetIndexRequest("*")
           .indicesOptions(IndicesOptions.lenientExpandOpen());
String[] indices = highLevelRestClient.indices()
           .get(getIndexRequest, RequestOptions.DEFAULT).getIndices();

因此,“ *”实际上是通配符,您可以通过前缀“ my_index- *”来过滤索引

链接到文档-elasticsearch java REST client Get Index API

答案 6 :(得分:0)

我发现这适用于 6.6.2 版本。

SearchRequest searchRequest = new SearchRequest();
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] searchHits = response.getHits().getHits();