Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support RETURN AS in SEARCH #119

Merged
merged 27 commits into from
Jul 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
7c30381
add new test to check FT.SERCH after JSON.SET
AvitalFineRedis Jun 28, 2021
f6ef89e
add AS statemnts to fields for SCHEMA
AvitalFineRedis Jun 28, 2021
1413156
CircleCI: replaced redismod:edge with rediseach:edge
rafie Jun 28, 2021
e5719fa
fixes 1
rafie Jun 28, 2021
4abf0bc
Merge branch 'master' into json_index_continue
gkorland Jul 1, 2021
bfa775c
change version
AvitalFineRedis Jul 6, 2021
cf99830
change version
AvitalFineRedis Jul 6, 2021
a513526
pull
AvitalFineRedis Jul 6, 2021
bbcec1e
pull
AvitalFineRedis Jul 6, 2021
b14e55d
pull
AvitalFineRedis Jul 6, 2021
575635f
fix failure
AvitalFineRedis Jul 6, 2021
cfc4bd4
cover AS in tests
AvitalFineRedis Jul 6, 2021
7f28a68
Update client_test.go
AvitalFineRedis Jul 11, 2021
9104853
Update client_test.go
AvitalFineRedis Jul 11, 2021
f0de532
Merge branch 'master' into json_index_continue
AvitalFineRedis Jul 11, 2021
ba9a383
fix undefined err
AvitalFineRedis Jul 11, 2021
2bfac50
add returnFields
AvitalFineRedis Jul 18, 2021
10948c8
returnFields fixes (1)
rafie Jul 18, 2021
a6f70db
test return as with hash index
AvitalFineRedis Jul 18, 2021
2eb060b
test only from versio 20200
AvitalFineRedis Jul 19, 2021
65badb8
gofmt fix
AvitalFineRedis Jul 19, 2021
c13ac87
merge
AvitalFineRedis Jul 21, 2021
9855655
circleci
AvitalFineRedis Jul 21, 2021
a9d341d
remove duplicated test
AvitalFineRedis Jul 21, 2021
221398f
add coment
AvitalFineRedis Jul 21, 2021
8c33f65
format
AvitalFineRedis Jul 21, 2021
179d250
Update Makefile
AvitalFineRedis Jul 27, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,8 @@ godoc:
echo "Open browser tab on localhost:6060"
$(GODOC)

start-redis:
$(docker) run --name redisearch-go-tests -d --rm -p 6379:6379 redislabs/redisearch:edge

stop-redis:
$(docker) stop redisearch-go-tests
14 changes: 14 additions & 0 deletions redisearch/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,20 @@ func (q *Query) SetReturnFields(fields ...string) *Query {
return q
}

// AddReturnFields adds the fields that should be returned from each result
// to the ReturnFields property
func (q *Query) AddReturnFields(fields ...string) *Query {
chayim marked this conversation as resolved.
Show resolved Hide resolved
q.ReturnFields = append(q.ReturnFields, fields...)
return q
}

// AddReturnField adds a single field with AS name that should be returned from
// each result to the ReturnFields property
func (q *Query) AddReturnField(field string, asName string) *Query {
q.ReturnFields = append(q.ReturnFields, field, "AS", asName)
return q
}

// SetPayload sets a binary payload to the query, that can be used by custom scoring functions
func (q *Query) SetPayload(payload []byte) *Query {
q.Payload = payload
Expand Down
63 changes: 63 additions & 0 deletions redisearch/redisearch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -447,3 +447,66 @@ func TestFilter(t *testing.T) {
assert.Equal(t, 0, total)
teardown(c)
}

func TestReturnFields(t *testing.T) {
c := createClient("TestReturnFields")
version, _ := c.getRediSearchVersion()
if version < 20200 {
// IndexDefinition is available for RediSearch 2.0+
return
}

// Create a schema
sc := NewSchema(DefaultOptions).
AddField(NewTextField("body")).
AddField(NewTextFieldOptions("title", TextFieldOptions{Weight: 5.0, Sortable: true})).
AddField(NewNumericFieldOptions("age", NumericFieldOptions{Sortable: true}))
c.Drop()
assert.Nil(t, c.CreateIndex(sc))

// Create a document
doc := NewDocument("TestFilter-doc1", 1.0)
doc.Set("title", "Hello world").
Set("body", "foo bar").
Set("age", 18)
assert.Nil(t, c.IndexOptions(DefaultIndexingOptions, doc))
// Searching with return fields
docs, total, err := c.Search(NewQuery("hello world").
AddReturnFields("body", "age").
AddReturnField("title", "doc_name"))
assert.Nil(t, err)
assert.Equal(t, 1, total)
assert.Equal(t, "foo bar", docs[0].Properties["body"])
assert.Equal(t, "18", docs[0].Properties["age"])
assert.Equal(t, "Hello world", docs[0].Properties["doc_name"])

// Test return fields with as name with json index
flush(c)

// Create index json
indexDefinition := NewIndexDefinition().SetIndexOn(JSON)
schema := NewSchema(DefaultOptions).
AddField(NewTextField("$.name")).
AddField(NewNumericField("$.age"))
err = c.CreateIndexWithIndexDefinition(schema, indexDefinition)
assert.Nil(t, err)

vanillaConnection := c.pool.Get()
_, err = vanillaConnection.Do("JSON.SET", "doc:1", "$", "{\"name\":\"Jon\", \"age\": 25}")
assert.Nil(t, err)

// Wait for the document to be indexed
info, err := c.Info()
assert.Nil(t, err)
for info.IsIndexing {
time.Sleep(time.Second)
info, _ = c.Info()
}

// Searching with return fields
docs, total, err = c.Search(NewQuery("*").AddReturnField("$.name", "name").AddReturnField("$.age", "years"))
assert.Nil(t, err)
assert.Equal(t, 1, total)
assert.Equal(t, "Jon", docs[0].Properties["name"])
assert.Equal(t, "25", docs[0].Properties["years"])
}