diff --git a/redisearch/client.go b/redisearch/client.go index 8caa664..d9dfae0 100644 --- a/redisearch/client.go +++ b/redisearch/client.go @@ -521,3 +521,12 @@ func (i *Client) GetConfig(option string) (map[string]string, error) { } return m, nil } + +// Get the distinct tags indexed in a Tag field +func (i *Client) GetTagVals(index string, filedName string) ([]string, error) { + conn := i.pool.Get() + defer conn.Close() + + args := redis.Args{index, filedName} + return redis.Strings(conn.Do("FT.TAGVALS", args...)) +} diff --git a/redisearch/client_test.go b/redisearch/client_test.go index 99d5bab..762ffe6 100644 --- a/redisearch/client_test.go +++ b/redisearch/client_test.go @@ -491,3 +491,29 @@ func TestClient_Config(t *testing.T) { kvs, _ = c.GetConfig("*") assert.Equal(t, "100", kvs["TIMEOUT"]) } + +func TestClient_GetTagVals(t *testing.T) { + c := createClient("testgettagvals") + + // Create a schema + sc := NewSchema(DefaultOptions). + AddField(NewTextField("name")). + AddField(NewTagField("tags")) + + c.Drop() + c.CreateIndex(sc) + + docs := make([]Document, 1) + doc := NewDocument("doc1", 1.0) + doc.Set("name", "John"). + Set("tags", "single, young") + docs[0] = doc + c.Index(docs...) + tags, err := c.GetTagVals("testgettagvals", "tags") + assert.Nil(t, err) + assert.Contains(t, tags, "single") + // negative tests + tags, err = c.GetTagVals("notexit", "tags") + assert.NotNil(t, err) + assert.Nil(t, tags) +}