Elasticsearch如何通过单次API调用同时获取搜索结果与准确匹配计数?
单次调用Elasticsearch _search API同时获取搜索结果与准确匹配计数
Elasticsearch 7.10.2默认的track_total_hits参数值为10000,当匹配文档数超过该阈值时,hits.total.value仅返回10000,并用relation: "gte"标识实际数量大于等于该值,这就是你遇到的问题。
要在单次_search请求中同时获取搜索结果和准确的匹配计数,只需在查询JSON体中添加track_total_hits: true参数,强制ES计算并返回精确的匹配总数:
# curl IP:9200/bigdata/_search?pretty -d '{ "track_total_hits": true, "query": { # 此处填入你原有的查询条件 } }' -H 'Content-Type: application/json'
执行该请求后,返回结果的hits.total.value会显示准确的1442357,同时hits.hits会返回默认的搜索结果(可通过size参数调整返回条数)。
如果担心超大匹配数场景下的性能问题,也可以将track_total_hits设置为一个大于实际匹配数的具体数值(比如2000000),这样既保证计数准确,又能避免全量计数带来的性能损耗。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

