diff --git a/README.md b/README.md index ba9968d..f9d166e 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ func ExampleClient() { | :--- | ----: | | [FT.CREATE](https://oss.redislabs.com/redisearch/Commands.html#ftcreate) | [CreateIndex](https://godoc.org/github.com/RediSearch/redisearch-go/redisearch#Client.CreateIndex) | | [FT.ADD](https://oss.redislabs.com/redisearch/Commands.html#ftadd) | [IndexOptions](https://godoc.org/github.com/RediSearch/redisearch-go/redisearch#Client.IndexOptions) | -| [FT.ADDHASH](https://oss.redislabs.com/redisearch/Commands.html#ftaddhash) | N/A | +| [FT.ADDHASH](https://oss.redislabs.com/redisearch/Commands.html#ftaddhash) | [AddHash](https://godoc.org/github.com/RediSearch/redisearch-go/redisearch#Client.AddHash) | | [FT.ALTER](https://oss.redislabs.com/redisearch/Commands.html#ftalter) | N/A | | [FT.ALIASADD](https://oss.redislabs.com/redisearch/Commands.html#ftaliasadd) | [AliasAdd](https://godoc.org/github.com/RediSearch/redisearch-go/redisearch#Client.AliasAdd) | | [FT.ALIASUPDATE](https://oss.redislabs.com/redisearch/Commands.html#ftaliasupdate) | [AliasUpdate](https://godoc.org/github.com/RediSearch/redisearch-go/redisearch#Client.AliasUpdate) | diff --git a/redisearch/client.go b/redisearch/client.go index aee4af6..2fdf43c 100644 --- a/redisearch/client.go +++ b/redisearch/client.go @@ -585,3 +585,19 @@ func (i *Client) SynDump(indexName string) (map[string][]int64, error) { } return m, nil } + +// Adds a document to the index from an existing HASH key in Redis. +func (i *Client) AddHash(docId string, score float32, language string, replace bool) (string, error) { + conn := i.pool.Get() + defer conn.Close() + + args := redis.Args{i.name, docId, score} + if language != "" { + args = args.Add("LANGUAGE", language) + } + + if replace { + args = args.Add("REPLACE") + } + return redis.String(conn.Do("FT.ADDHASH", args...)) +} diff --git a/redisearch/client_test.go b/redisearch/client_test.go index b3d6b29..bd0dc11 100644 --- a/redisearch/client_test.go +++ b/redisearch/client_test.go @@ -512,3 +512,21 @@ func TestClient_SynDump(t *testing.T) { assert.Equal(t, gid, m["baby"][0]) assert.Equal(t, gid2, m["child"][0]) } + +func TestClient_AddHash(t *testing.T) { + c := createClient("testAddHash") + + sc := NewSchema(DefaultOptions). + AddField(NewTextField("name")). + AddField(NewTextField("addr")) + c.Drop() + err := c.CreateIndex(sc) + assert.Nil(t, err) + + // Add a hash key + c.pool.Get().Do("HMSET", "myhash", "field1", "Hello") + + ret, err := c.AddHash("myhash", 1, "english", false) + assert.Nil(t, err) + assert.Equal(t, "OK", ret) +}