Elasticsearch Java API索引文档计数

时间:2017-10-02 18:44:24

标签: java elasticsearch

我知道curl命令来获取我需要的信息。

curl localhost:9200/_cat/indices/alerts*

,输出

yellow open alerts_1502744517_1 5 1 25 0 642.3kb 642.3kb 
yellow open alerts_1502744517_0 5 1 25 0 741.8kb 741.8kb 
yellow open alerts_1502744882_0 5 1 27 0 679.8kb 679.8kb 

我需要的是索引名称和文档计数,在本例中是第6列(25,25和27)。如何使用java API进行等效调用?

3 个答案:

答案 0 :(得分:0)

我认为一种方法是获得所有指数

String[] indices = client.admin()
                             .cluster().prepareState().get()
                             .getState().getMetaData()
                             .getConcreteAllIndices()

然后遍历它们并得到每个指数的计数。

如果您想进行REST通话,请查看此课程:RestIndicesAction.javacat package

答案 1 :(得分:0)

我没有尝试,但经过对baeldungstackoverflow的一些研究。我找到了一个可以使用这个maven依赖的解决方案

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.4.0</version>
</dependency>

这是代码

Node node = nodeBuilder()
  .clusterName("elasticsearch")
  .client(true).node();
Client client = node.client();
SearchResponse response = client.prepareSearch("my-index")
   .setTypes("my-type")
   .setSearchType(SearchType.QUERY_AND_FETCH)
   .setFetchSource(new String[]{"field1", "field2"}, null)
   .setQuery(QueryBuilders.termsQuery("field1", "1234"))
   .execute()
   .actionGet();

for (SearchHit hit : response.getHits()){
   Map map = hit.getSource();
   map.toString();
}

如果您有任何错误,请告诉我

答案 2 :(得分:0)

这是我的解决方案。用Java 8编写的ElasticSearch 6.2.4。

/*for document count*/
long docCount = client.admin().indices().prepareStats(indiceName).clear().setDocs(true).execute().actionGet().getPrimaries().getDocs().getCount();