mirror of
https://github.com/redis/go-redis.git
synced 2025-11-24 18:41:04 +03:00
feat(vectorset): add vrange command (#3543)
This commit is contained in:
@@ -26,6 +26,7 @@ type VectorSetCmdable interface {
|
|||||||
VSimWithScores(ctx context.Context, key string, val Vector) *VectorScoreSliceCmd
|
VSimWithScores(ctx context.Context, key string, val Vector) *VectorScoreSliceCmd
|
||||||
VSimWithArgs(ctx context.Context, key string, val Vector, args *VSimArgs) *StringSliceCmd
|
VSimWithArgs(ctx context.Context, key string, val Vector, args *VSimArgs) *StringSliceCmd
|
||||||
VSimWithArgsWithScores(ctx context.Context, key string, val Vector, args *VSimArgs) *VectorScoreSliceCmd
|
VSimWithArgsWithScores(ctx context.Context, key string, val Vector, args *VSimArgs) *VectorScoreSliceCmd
|
||||||
|
VRange(ctx context.Context, key, start, end string, count int64) *StringSliceCmd
|
||||||
}
|
}
|
||||||
|
|
||||||
type Vector interface {
|
type Vector interface {
|
||||||
@@ -345,3 +346,13 @@ func (c cmdable) VSimWithArgsWithScores(ctx context.Context, key string, val Vec
|
|||||||
_ = c(ctx, cmd)
|
_ = c(ctx, cmd)
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// `VRANGE key start end count`
|
||||||
|
// a negative count means to return all the elements in the vector set.
|
||||||
|
// note: the API is experimental and may be subject to change.
|
||||||
|
func (c cmdable) VRange(ctx context.Context, key, start, end string, count int64) *StringSliceCmd {
|
||||||
|
args := []any{"vrange", key, start, end, count}
|
||||||
|
cmd := NewStringSliceCmd(ctx, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|||||||
@@ -260,6 +260,24 @@ var _ = Describe("Redis VectorSet commands", Label("vectorset"), func() {
|
|||||||
expectNil(err)
|
expectNil(err)
|
||||||
expectEqual(len(res), len(vals))
|
expectEqual(len(res), len(vals))
|
||||||
|
|
||||||
|
if RedisVersion >= 8.4 {
|
||||||
|
res, err = client.VRange(ctx, vecName, "[k1", "[k2", -1).Result()
|
||||||
|
expectNil(err)
|
||||||
|
expectEqual(len(res), 2)
|
||||||
|
|
||||||
|
res, err = client.VRange(ctx, vecName, "-", "[k2", -1).Result()
|
||||||
|
expectNil(err)
|
||||||
|
expectEqual(len(res), 3)
|
||||||
|
|
||||||
|
res, err = client.VRange(ctx, vecName, "(k1", "+", -1).Result()
|
||||||
|
expectNil(err)
|
||||||
|
expectEqual(len(res), 3)
|
||||||
|
|
||||||
|
res, err = client.VRange(ctx, vecName, "[k1", "+", 2).Result()
|
||||||
|
expectNil(err)
|
||||||
|
expectEqual(len(res), 2)
|
||||||
|
}
|
||||||
|
|
||||||
// test equality
|
// test equality
|
||||||
sim, err := client.VSimWithArgs(ctx, vecName, &vals[0].v, &redis.VSimArgs{
|
sim, err := client.VSimWithArgs(ctx, vecName, &vals[0].v, &redis.VSimArgs{
|
||||||
Filter: `.age == 25`,
|
Filter: `.age == 25`,
|
||||||
|
|||||||
Reference in New Issue
Block a user