调用response.getHits().getTotalHits()返回0,但响应中存在命中结果的问题求助
调用response.getHits().getTotalHits()返回0,但响应中存在命中结果的问题求助
嘿,我之前也碰到过一模一样的情况,大概率是Elasticsearch的track_total_hits参数在搞鬼!
你想啊,Elasticsearch为了提升查询性能,默认情况下如果命中结果量很大,不会返回精确的总命中数;要是你没主动开启这个追踪参数,甚至会直接返回0。刚好你已经用到了SearchSourceBuilder,只需要在里面加一行配置就行:
searchSourceBuilder.trackTotalHits(true);
如果你担心全量精确统计影响性能,也可以设置一个阈值(比如最多精确统计10000条命中,超过这个数就返回近似值),写法是:
searchSourceBuilder.trackTotalHits(10000);
另外也得检查下你的客户端版本和Elasticsearch服务端版本是不是匹配,有些版本间的API逻辑有细微调整,也可能导致这种奇怪的返回结果。不过你说响应里明明有命中结果,那最可能的原因还是没开track_total_hits,先试试这个改动应该就能解决问题!
备注:内容来源于stack exchange,提问作者Pepe Silvia
相关产品推荐
相关产品推荐

