Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch使用Java客户端查找所有索引_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

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

Elasticsearch使用Java客户端查找所有索引,java,elasticsearch,Java,elasticsearch,有没有一种方法可以使用Java客户端获取Elasticsearch中的索引列表?我已经找到了使用Marvel/Sense进行此操作的示例,但我似乎找不到任何使用Java客户端进行此操作的示例。这肯定是可能的,但不幸的是,Java客户端的官方文档中没有对此进行记录。您可以通过以下方式实现这一点: List<IndexMetaData> indices = client.admin().cluster() .prepareState().get().getState()

有没有一种方法可以使用Java客户端获取Elasticsearch中的索引列表?我已经找到了使用Marvel/Sense进行此操作的示例,但我似乎找不到任何使用Java客户端进行此操作的示例。

这肯定是可能的,但不幸的是,Java客户端的官方文档中没有对此进行记录。您可以通过以下方式实现这一点:

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();

如果其他人到了这里并感到疑惑,这个函数将返回一个字符串[],这可能更容易处理。