Skip to content

Commit 161a1de

Browse files
authored
Support NOSTOPWORDS tag in FT.SEARCH command (#155)
* Support NOSTOPWORDS tag
1 parent d1b07e7 commit 161a1de

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

redisearch/query.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ const (
2727
// Fetch document payloads as well as fields. See documentation for payloads on redisearch.io
2828
QueryWithPayloads Flag = 0x10
2929

30+
// The query will not filter stopwords
31+
QueryWithStopWords Flag = 0x20
32+
3033
// ... more to come!
3134

3235
DefaultOffset = 0
@@ -146,6 +149,9 @@ func (q Query) serialize() redis.Args {
146149
args = args.Add("SLOP", *q.Slop)
147150
}
148151

152+
if q.Flags&QueryWithStopWords != 0 {
153+
args = args.Add("NOSTOPWORDS")
154+
}
149155
if q.Flags&QueryInOrder != 0 {
150156
args = args.Add("INORDER")
151157
}

redisearch/query_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func TestQuery_serialize(t *testing.T) {
9494
{"QueryInOrder", fields{Raw: raw, Flags: QueryInOrder}, redis.Args{raw, "LIMIT", 0, 0, "INORDER"}},
9595
{"QueryWithPayloads", fields{Raw: raw, Flags: QueryWithPayloads}, redis.Args{raw, "LIMIT", 0, 0, "WITHPAYLOADS"}},
9696
{"QueryWithScores", fields{Raw: raw, Flags: QueryWithScores}, redis.Args{raw, "LIMIT", 0, 0, "WITHSCORES"}},
97+
{"QueryWithStopWords", fields{Raw: raw, Flags: QueryWithStopWords}, redis.Args{raw, "LIMIT", 0, 0, "NOSTOPWORDS"}},
9798
{"InKeys", fields{Raw: raw, InKeys: []string{"test_key"}}, redis.Args{raw, "LIMIT", 0, 0, "INKEYS", 1, "test_key"}},
9899
{"InFields", fields{Raw: raw, InFields: []string{"test_key"}}, redis.Args{raw, "LIMIT", 0, 0, "INFIELDS", 1, "test_key"}},
99100
{"ReturnFields", fields{Raw: raw, ReturnFields: []string{"test_field"}}, redis.Args{raw, "LIMIT", 0, 0, "RETURN", 1, "test_field"}},

redisearch/redisearch_test.go

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,14 +200,14 @@ func TestNoIndex(t *testing.T) {
200200
assert.Nil(t, err)
201201
assert.Equal(t, 0, total)
202202

203-
_, total, err = c.Search(NewQuery("@f2:Mark*"))
203+
_, total, _ = c.Search(NewQuery("@f2:Mark*"))
204204
assert.Equal(t, 2, total)
205205

206-
docs, total, err := c.Search(NewQuery("@f2:Mark*").SetSortBy("f1", false))
206+
docs, total, _ := c.Search(NewQuery("@f2:Mark*").SetSortBy("f1", false))
207207
assert.Equal(t, 2, total)
208208
assert.Equal(t, "TestNoIndex-doc1", docs[0].Id)
209209

210-
docs, total, err = c.Search(NewQuery("@f2:Mark*").SetSortBy("f1", true))
210+
docs, total, _ = c.Search(NewQuery("@f2:Mark*").SetSortBy("f1", true))
211211
assert.Equal(t, 2, total)
212212
assert.Equal(t, "TestNoIndex-doc2", docs[0].Id)
213213
teardown(c)
@@ -439,7 +439,7 @@ func TestFilter(t *testing.T) {
439439
assert.Equal(t, 1, total)
440440
assert.Equal(t, "18", docs[0].Properties["age"])
441441

442-
docs, total, err = c.Search(NewQuery("hello world").
442+
_, total, err = c.Search(NewQuery("hello world").
443443
AddFilter(Filter{Field: "location", Options: GeoFilterOptions{Lon: 10, Lat: 13, Radius: 1, Unit: KILOMETERS}}).
444444
SetSortBy("age", true).
445445
SetReturnFields("body"))
@@ -511,6 +511,29 @@ func TestReturnFields(t *testing.T) {
511511
assert.Equal(t, "25", docs[0].Properties["years"])
512512
}
513513

514+
func TestNoStopWords(t *testing.T) {
515+
c := createClient("testung")
516+
517+
sc := NewSchema(DefaultOptions).
518+
AddField(NewTextField("title"))
519+
c.Drop()
520+
521+
err := c.CreateIndex(sc)
522+
assert.Nil(t, err)
523+
524+
vanillaConnection := c.pool.Get()
525+
_, err = vanillaConnection.Do("HSET", "doc1", "title", "hello world")
526+
assert.Nil(t, err)
527+
528+
// Searching
529+
_, total, err := c.Search(NewQuery("hello a world").SetFlags((QueryNoContent)))
530+
assert.Nil(t, err)
531+
assert.Equal(t, 1, total)
532+
_, total, err = c.Search(NewQuery("hello a world").SetFlags((QueryNoContent | QueryWithStopWords)))
533+
assert.Nil(t, err)
534+
assert.Equal(t, 0, total)
535+
}
536+
514537
func TestParams(t *testing.T) {
515538
c := createClient("TestParams")
516539
version, _ := c.getRediSearchVersion()

0 commit comments

Comments
 (0)