diff --git a/vectorset_commands.go b/vectorset_commands.go index 96be1af11..8f99de073 100644 --- a/vectorset_commands.go +++ b/vectorset_commands.go @@ -26,6 +26,7 @@ type VectorSetCmdable interface { VSimWithScores(ctx context.Context, key string, val Vector) *VectorScoreSliceCmd VSimWithArgs(ctx context.Context, key string, val Vector, args *VSimArgs) *StringSliceCmd 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 { @@ -345,3 +346,13 @@ func (c cmdable) VSimWithArgsWithScores(ctx context.Context, key string, val Vec _ = c(ctx, 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 +} diff --git a/vectorset_commands_integration_test.go b/vectorset_commands_integration_test.go index 147fb84c5..521b44402 100644 --- a/vectorset_commands_integration_test.go +++ b/vectorset_commands_integration_test.go @@ -260,6 +260,22 @@ var _ = Describe("Redis VectorSet commands", Label("vectorset"), func() { expectNil(err) expectEqual(len(res), len(vals)) + 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 sim, err := client.VSimWithArgs(ctx, vecName, &vals[0].v, &redis.VSimArgs{ Filter: `.age == 25`,