Elasticsearch Java REST 客户端:查看符合条件的命中数是否超过 SearchSourceBuilder 大小
Elasticsearch Java REST Client: see if number of eligible hits exceeded SearchSourceBuilder size
我有一个 Elasticsearch 请求:
SearchSourceBuilder source = new SearchSourceBuilder()
.size(limit)
.from(offset)
.query(queryBuilder)
SearchRequest searchRequest = new SearchRequest(indexName)
.types(type)
.source(source);
SearchResponse searchResponse = client.search(searchRequest);
我需要根据 returned 的结果数量是否受到 limit
参数的限制(换句话说,是否有更多结果 return)。有没有办法查看与查询匹配的合格搜索命中数是否超过 limit
,而不是执行另一个查询,或者将大小设置为 limit + 1
并删除响应中的最后一个命中?
Elasticsearch returns 在 hits.totalHits
属性 响应中与您的查询匹配的文档总数。如果它大于 offset+limit
那么你有下一页。
我认为你首先需要的只是一个计数搜索,我的意思是做你想要的查询并将 size
设置为 0
这使得结果只是 return总点击量,这里可以得到每页的大小。
int pageSize = 10;
long totalCount = searchResponse.getHits().getTotalHits();
PageCount pageCount = new PageCount();
if (totalCount <= 0)
return result;
long pages = (totalCount < pageSize) ? 1l : ((totalCount % pageSize) == 0) ? (totalCount / pageSize) : ((totalCount / pageSize) + 1);
if (totalCount <= 10000) {
result.setTotal(totalCount);
result.setPages(pages);
} else {
result.setTotal(10000);
result.setPages((10000 / pageSize));
}
这里我使用 10000 作为限制,以便 Elasticsearch 限制它消耗的内存量。获得此信息后,您可以 return 查询页数并对给定页面提出请求。
完成后,您可以设置搜索请求,例如:
long size = ((pageCount.getTotal() < pageSize) ? pageCount.getTotal() : pageSize);
if (pageCount.getTotal() > pageSize && (page + 1) >= pageCount.getPages()) {
size = ((pageCount.getTotal() % pageSize) != 0 ? pageCount.getTotal() % pageSize : pageSize);
}
searchRequest.setSize((int) size).setFrom((int) (page * pageSize))
这只是示例代码,希望对您有所帮助。
干杯
我有一个 Elasticsearch 请求:
SearchSourceBuilder source = new SearchSourceBuilder()
.size(limit)
.from(offset)
.query(queryBuilder)
SearchRequest searchRequest = new SearchRequest(indexName)
.types(type)
.source(source);
SearchResponse searchResponse = client.search(searchRequest);
我需要根据 returned 的结果数量是否受到 limit
参数的限制(换句话说,是否有更多结果 return)。有没有办法查看与查询匹配的合格搜索命中数是否超过 limit
,而不是执行另一个查询,或者将大小设置为 limit + 1
并删除响应中的最后一个命中?
Elasticsearch returns 在 hits.totalHits
属性 响应中与您的查询匹配的文档总数。如果它大于 offset+limit
那么你有下一页。
我认为你首先需要的只是一个计数搜索,我的意思是做你想要的查询并将 size
设置为 0
这使得结果只是 return总点击量,这里可以得到每页的大小。
int pageSize = 10;
long totalCount = searchResponse.getHits().getTotalHits();
PageCount pageCount = new PageCount();
if (totalCount <= 0)
return result;
long pages = (totalCount < pageSize) ? 1l : ((totalCount % pageSize) == 0) ? (totalCount / pageSize) : ((totalCount / pageSize) + 1);
if (totalCount <= 10000) {
result.setTotal(totalCount);
result.setPages(pages);
} else {
result.setTotal(10000);
result.setPages((10000 / pageSize));
}
这里我使用 10000 作为限制,以便 Elasticsearch 限制它消耗的内存量。获得此信息后,您可以 return 查询页数并对给定页面提出请求。
完成后,您可以设置搜索请求,例如:
long size = ((pageCount.getTotal() < pageSize) ? pageCount.getTotal() : pageSize);
if (pageCount.getTotal() > pageSize && (page + 1) >= pageCount.getPages()) {
size = ((pageCount.getTotal() % pageSize) != 0 ? pageCount.getTotal() % pageSize : pageSize);
}
searchRequest.setSize((int) size).setFrom((int) (page * pageSize))
这只是示例代码,希望对您有所帮助。
干杯