elasticsearch(es)获取匹配文档的总条数的接口是什么?各种方式如何使用?
推荐答案
针对获取匹配文档的总数需求,es 对此提供了单独的 count 接口。
{index}/_count
kibana 的示例
假设针对 qa 索引,针对 question 和 answer 字段匹配 elasticsearh 的文档总数显示,kibana dev tools 中的代码如下:
GET qa/_count
{
"query": {
"multi_match": {
"query": "elasticsearch",
"fields": ["question","answer"]
}
}
}
返回结果可能如下:
{ "count": 327, "_shards": { "total": 8, "successful": 8, "skipped": 0, "failed": 0 } }
curl 命令快速查看
curl 命令支持 http 协议,通过 elasticsearch 的 http restful 接口访问代码示例如下:
curl -X GET -H "Content-Type:application/json" -d '{"query":{"multi_match":{"query":"elasticsearch","fields":["question","answer"]}}}' http://{es_url}:{es_url,eg:9200}/qa/_count
java ElasticsearchTemplate _count
如果项目中,使用 java spring-data-elasticsearch 的 ElasticsearchTemplate 操作 es,可以进行如下操作:
String[] count_match_field = new String[]{"question", "answer"};
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders
.multiMatchQuery(keyword, count_match_field)
.minimumShouldMatch("100%");
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(INDEX)
.withQuery(multiMatchQueryBuilder)
.build();
try {
long count = elasticsearchTemplate.count(searchQuery);
searchContext.getCommonSearchResultDTOWrapper().setTotal((int) count);
} catch (Throwable throwable) {
log.error("qa count es error", throwable);
}