Go SDK是否支持数组字段高级过滤?功能异常咨询
Go SDK数组字段高级过滤支持说明
核心结论
Go SDK完全支持ARRAY_CONTAINS、ARRAY_CONTAINS_ALL、ARRAY_CONTAINS_ANY、ARRAY_LENGTH这类数组高级过滤,文档中提到的filter参数,对应Go SDK里的expr参数——只是文档表述和SDK参数命名不同,二者功能完全一致。
关于ARRAY_CONTAINS_ANY多元素失效的问题
你遇到的单元素正常、多元素失效的情况,大概率是语法使用错误。正确的多元素写法需要用方括号包裹元素列表,示例如下:
- 错误写法:
ARRAY_CONTAINS_ANY(x, 1,2,3) - 正确写法:
ARRAY_CONTAINS_ANY(x, [1,2,3])
实际使用示例
Query方法示例
// 假设数组字段名为tags,要过滤出tags包含[1,3,5]中任意元素的结果 expr := "ARRAY_CONTAINS_ANY(tags, [1,3,5])" result, err := client.Query( ctx, "your_collection", []string{}, // 空数组表示查询所有分区 expr, []string{"id", "tags"}, // 指定返回字段 ) if err != nil { // 错误处理 }
Search方法示例
// 结合向量检索+数组过滤 expr := "ARRAY_LENGTH(tags) > 2" results, err := client.Search( ctx, "your_collection", []string{}, expr, []string{"id", "tags"}, vectors, // 待检索的向量数组 "vector_field", entity.L2, 10, nil, // 检索参数,如IVF_FLAT的nprobe等 ) if err != nil { // 错误处理 }
补充说明
你贴出的SDK源码中,Search和Query方法的expr参数就是专门用来传递各类过滤条件的,包括数组相关的高级过滤函数。只要语法正确,就能实现文档中描述的所有数组过滤功能。
内容的提问来源于stack exchange,提问作者rachel song
相关产品推荐
相关产品推荐

