我需要获取索引中的文档数量。不是文件本身,而是这个“多少”。
最好的方法是什么?
有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,但似乎有点老了。
我可以获取给定索引中的所有文档并提出“多少”。但必须有更好的方法。
答案 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。
答案 4 :(得分:0)
我们还可以从highLevelClient获取lowLevelClient并调用“ _count”休息API,例如“ GET / twitter / _doc / _count?q = user:kimchy”。