如果想要计算索引(Elasticsearch)中的文档数量,那么(至少?)有两种可能性:
直接 count
POST my_index/_count
应该返回文件的数量my_index.
运用 search
在这里,人们可以使用count的search_type或一些其他类型.在任何一种情况下,总计数都可以从字段中提取['hits']['total']
我的问题是:
不同方法之间有什么区别?我应该选择哪一个?
我提出这个问题是因为根据所选择的方法我会遇到不同的结果.我现在正在调试问题,这个问题突然出现了.
我正在为项目使用spring-data-elasticsearch为其提供全文搜索功能.我们将真实数据保存在关系数据库和相关元数据中以及弹性搜索中的相应ID.因此,对于搜索结果,只需要id字段,因为将从关系数据库中检索实际数据.
我正在构建基于搜索条件的搜索查询,然后执行queryForIds():
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(indexName)
.withTypes(typeName)
.withQuery(getQueryBuilder(searchParams))
.withPageable(pageable)
.build();
return elasticsearchTemplate.queryForIds(searchQuery);
Run Code Online (Sandbox Code Playgroud)
如果我还需要特定searchQuery的总计数,我可以再做一次elasticsearchTemplate.count(searchQuery)调用,但是根据我的理解,这将是多余的.我认为有一种方法可以通过使用类似于elasticsearchTemplate.queryForPage()单个调用的方式来获取id和总计数列表.
另外,我可以使用queryForPage(SearchQuery query, Class<T> clazz, SearchResultMapper mapper)未注释的自定义类@Document吗?实际的文档类非常大,如果我不确定传递大类是否会导致引擎上的任何额外负载,因为有超过100个字段要进行json映射,但我需要的只是id字段..withFields("id")无论如何,我将在查询构建器中有一个.