Elasticsearch使用Java客户端查找所有索引
有没有一种方法可以使用Java客户端获取Elasticsearch中的索引列表?我已经找到了使用Marvel/Sense进行此操作的示例,但我似乎找不到任何使用Java客户端进行此操作的示例。这肯定是可能的,但不幸的是,Java客户端的官方文档中没有对此进行记录。您可以通过以下方式实现这一点:Elasticsearch使用Java客户端查找所有索引,java,elasticsearch,Java,elasticsearch,有没有一种方法可以使用Java客户端获取Elasticsearch中的索引列表?我已经找到了使用Marvel/Sense进行此操作的示例,但我似乎找不到任何使用Java客户端进行此操作的示例。这肯定是可能的,但不幸的是,Java客户端的官方文档中没有对此进行记录。您可以通过以下方式实现这一点: List<IndexMetaData> indices = client.admin().cluster() .prepareState().get().getState()
List<IndexMetaData> indices = client.admin().cluster()
.prepareState().get().getState()
.getMetaData().getIndices();
List index=client.admin().cluster()
.prepareState().get().getState()
.getMetaData().GetIndexs();
我找到了另一种方法:
client.admin()
.indices()
.getIndex(new GetIndexRequest())
.actionGet()
.getIndices()
这也适用于Elasticsearch 6.2.3和java API客户端6.2.3:
String[] indices = client.admin().indices().prepareGetIndex().setFeatures().get().getIndices();
Elasticsearch 6.5,RestHighLevelClient:
ClusterHealthRequest request = new ClusterHealthRequest();
ClusterHealthResponse response = client.cluster().health(request, RequestOptions.DEFAULT);
Set<String> indices = response.getIndices().keySet();
ClusterHealthRequest请求=新的ClusterHealthRequest();
ClusterHealthResponse=client.cluster().health(request,RequestOptions.DEFAULT);
设置索引=response.getindex().keySet();
对于RestHighLevelClient
:
尝试使用:/\u cat/index?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());
InputStream InputStream=restHighLevelClient.getLowLevelClient()
.performRequest(“获取”、“分类/索引?h=i”)
.getHttpResponse()
.getEntity()
.getContent();
列表索引=新的BufferedReader(新的InputStreamReader(inputStream))
.行()
.collect(Collectors.toList());
另外,如果您想使用正则表达式进行搜索:
/\u cat/index?h=i&index=test*
我使用的是客户机版本6.8.0,我能够获得如下索引:
GetIndexRequest getIndexRequest = new GetIndexRequest("*")
.indicesOptions(IndicesOptions.lenientExpandOpen());
String[] indices = highLevelRestClient.indices()
.get(getIndexRequest, RequestOptions.DEFAULT).getIndices();
所以实际上“*”在这里是一个通配符,您可以通过前缀过滤索引,如“my_index-*”链接到文档-我发现它适用于6.6.2版本
SearchRequest searchRequest = new SearchRequest();
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] searchHits = response.getHits().getHits();
如果其他人到了这里并感到疑惑,这个函数将返回一个字符串[],这可能更容易处理。