You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:52:09