私有Vespa服务器:高效获取符合条件的全部文档ID的最优方法
Vespa获取全量匹配文档ID的最优方案
利用Scroll游标分页查询
这是最推荐的方式,既借助索引的高效匹配能力,又避开单次查询的maxHits限制。执行初始查询时带上scroll参数获取游标ID,之后循环用该ID拉取后续结果,直到返回空结果集:
初始请求:select id from my_container where my_field contains "my_value" limit 1000 scroll后续分页请求:
select id from my_container where scrollId="YOUR_SCROLL_ID"这种方式仅扫描索引匹配的文档,效率远高于全量遍历的visit方法。
临时调高单查询的maxHits限制
如果只是偶尔导出全量结果,且匹配文档总量在服务器内存承受范围内,可直接在查询中设置更大的limit值(覆盖全局maxHits配置):select id from my_container where my_field contains "my_value" limit 500000注意不要设置过大导致内存溢出,适合匹配文档量中等的场景。
Batch API并行查询(大规模集群场景)
若集群节点较多,可通过Batch API针对不同节点发起并行查询,每个节点返回部分结果后再合并。这种方式能进一步提升大集群下的查询效率,但需要对集群节点分布有一定了解。
对比说明:visit方法是全量遍历所有文档,即使匹配占比极低也要扫完全量,因此效率差;而上述方法均基于已索引的字段做精准匹配扫描,只处理符合条件的文档,性能优势明显。
内容的提问来源于stack exchange,提问作者pic11
相关产品推荐
相关产品推荐

