如何在Vespa数据库中编写基于条件的删除查询?
在Vespa中实现条件删除(等价于SQL的
DELETE WHERE) Vespa不支持SQL风格的直接DELETE FROM * WHERE myfield="test"语句,要实现条件删除,主要有两种可行方案:
方案1:查询筛选+逐个删除
先通过查询获取所有符合条件的文档ID,再对每个ID发送删除请求:
步骤1:查询获取目标文档ID
使用YQL查询匹配myfield="test"的文档,仅返回ID字段:
curl -H "Content-Type: application/json" -X POST http://<vespa-host>:<port>/search/ -d '{ "yql": "select id from <你的索引名称> where myfield = \"test\";", "hits": 1000 # 根据需要调整返回数量,若超过1000需分页 }'
步骤2:逐个删除文档
遍历返回结果中的id值,对每个ID发送删除请求:
curl -X DELETE http://<vespa-host>:<port>/document/v1/<你的命名空间>/<文档类型>/docid/<获取到的文档ID>
方案2:批量删除(Bulk Delete)
通过Feed API提交批量删除任务,直接基于查询条件批量删除文档:
构造批量删除请求体
创建bulk-delete.json文件,内容如下:
[ { "delete": { "query": "myfield:\"test\"", "documentType": "<你的文档类型>", "namespace": "<你的命名空间>" } } ]
提交批量删除请求
curl -H "Content-Type: application/json" -X POST http://<vespa-host>:<port>/document/v1/feed -d @bulk-delete.json
注意:批量删除需要集群支持批量操作配置,执行前请确认条件准确性,避免误删大量数据。
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

