Watson Discovery查询全集合仅返回10条结果,如何获取全部17条匹配数据
解决方案
原因说明
Watson Discovery 查询接口默认仅返回10条匹配结果,matching_results返回的是全局匹配总数,和单次返回的结果条数无关。
单次拉取全量结果(匹配数≤1000时适用,你的17条满足该场景)
你只需要在构建查询参数时额外指定count参数,设置值≥总匹配数即可:
QueryOptions.Builder queryBuilder = new QueryOptions .Builder(environmentId, collectionId); queryBuilder.query("text:*"); // 新增配置:指定返回17条结果,也可以直接设置为20等大于17的数值 queryBuilder.count(17); QueryResponse queryResponse = discovery.query(queryBuilder.build()).execute().getResult();
动态获取全量结果(适配匹配数不确定的场景)
如果不想硬编码count数值,可以先查询总匹配数再动态拉取:
QueryOptions.Builder queryBuilder = new QueryOptions .Builder(environmentId, collectionId); queryBuilder.query("text:*"); // 第一步:仅查询总匹配数,不返回文档内容 queryBuilder.count(0); QueryResponse countResp = discovery.query(queryBuilder.build()).execute().getResult(); int total = countResp.getMatchingResults().intValue(); // 第二步:按总匹配数拉取全量结果 queryBuilder.count(total); QueryResponse fullResp = discovery.query(queryBuilder.build()).execute().getResult();
直接输出JSON格式结果
SDK 已经内置了JSON序列化能力,无需自行解析:
// 输出格式化的JSON字符串 String formattedJson = fullResp.toString(); // 输出紧凑无空白的JSON字符串 String compactJson = fullResp.getJsonObject().toString();
超过1000条的补充说明
如果后续匹配总条数超过1000(Watson Discovery单页查询最大返回条数),需要结合offset参数分页拉取,每轮查询偏移上一轮的条数,最后合并所有结果即可。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

