Elasticsearch Java API - 如何在不检索文档的情况下获取文档数量

时间:2017-06-07 20:48:58

标签: java elasticsearch

我需要获取索引中的文档数量。不是文件本身,而是这个“多少”。

最好的方法是什么?

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-count.html。但我希望用Java做到这一点。

还有https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/count.html,但似乎有点老了。

我可以获取给定索引中的所有文档并提出“多少”。但必须有更好的方法。

5 个答案:

答案 0 :(得分:7)

使用搜索API,但将其设置为不返回任何文档,并从它返回的SearchResponse对象中检索点击次数。

例如:

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.QueryBuilders.*;

SearchResponse response = client.prepareSearch("your_index_goes_here")
    .setTypes("YourTypeGoesHere")
    .setQuery(QueryBuilders.termQuery("some_field", "some_value"))
    .setSize(0) // Don't return any documents, we don't need them.
    .get();

SearchHits hits = response.getHits();
long hitsCount = hits.getTotalHits();

答案 1 :(得分:3)

enter code here Elastic - Indices Stats

  

指标级别统计信息提供有关不同操作的统计信息   发生在索引上。 API提供索引级别的统计信息   范围(尽管大多数统计信息也可以使用节点级别进行检索   范围)。

prepareStats(indexName) client.admin().indices().prepareStats(indexName).get().getTotal().getDocs().getCount();

答案 2 :(得分:2)

只是@evanjd答案的补充

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.QueryBuilders.*;

 SearchResponse response = client.prepareSearch("your_index_goes_here")
   .setTypes("YourTypeGoesHere")
   .setQuery(QueryBuilders.termQuery("some_field", "some_value"))
   .setSize(0) // Don't return any documents, we don't need them.
   .get();

 SearchHits hits = response.getHits();
 long hitsCount = hits.getTotalHits().value;

我们需要添加.value以获得总匹配的长值,否则它将是一个字符串值,例如“ 6个匹配”

long hitsCount = hits.getTotalHits().value;

long hitsCount = hits.getTotalHits()。value;

答案 3 :(得分:1)

7.0之后出现重大变化;您需要在搜索请求中将track_total_hits显式设置为true。

https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#track-total-hits-10000-default

答案 4 :(得分:0)

我们还可以从highLevelClient获取lowLevelClient并调用“ _count”休息API,例如“ GET / twitter / _doc / _count?q = user:kimchy”。