有没有办法使用Java客户端获取Elasticsearch中的索引列表?我已经能够找到使用Marvel / Sense执行此操作的示例,但我似乎无法找到使用Java客户端执行此操作的任何示例。
答案 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();