Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions redisearch/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@ func (q Query) serialize() redis.Args {
args = args.Add("SCORER", q.Scorer)
}

if q.Language != "" {
args = args.Add("LANGUAGE", q.Language)
}

if q.Expander != "" {
args = args.Add("EXPANDER", q.Expander)
}
Expand Down
74 changes: 70 additions & 4 deletions redisearch/query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ func TestPaging_serialize(t *testing.T) {
fields fields
want redis.Args
}{
{"default", fields{0,10}, redis.Args{} },
{"0-1000", fields{0,1000}, redis.Args{"LIMIT",0,1000} },
{"100-200", fields{100,200}, redis.Args{"LIMIT",100,200} },
{"default", fields{0, 10}, redis.Args{}},
{"0-1000", fields{0, 1000}, redis.Args{"LIMIT", 0, 1000}},
{"100-200", fields{100, 200}, redis.Args{"LIMIT", 100, 200}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand All @@ -31,4 +31,70 @@ func TestPaging_serialize(t *testing.T) {
}
})
}
}
}

func TestQuery_serialize(t *testing.T) {
var raw = "test_query"
type fields struct {
Raw string
Flags Flag
InKeys []string
ReturnFields []string
Language string
Expander string
Scorer string
SortBy *SortingKey
HighlightOpts *HighlightOptions
SummarizeOpts *SummaryOptions
}
tests := []struct {
name string
fields fields
want redis.Args
}{
{"default", fields{Raw: ""}, redis.Args{"", "LIMIT", 0, 0}},
{"Raw", fields{Raw: raw}, redis.Args{raw, "LIMIT", 0, 0}},
{"QueryVerbatim", fields{Raw: raw, Flags: QueryVerbatim}, redis.Args{raw, "LIMIT", 0, 0, "VERBATIM"}},
{"QueryNoContent", fields{Raw: raw, Flags: QueryNoContent}, redis.Args{raw, "LIMIT", 0, 0, "NOCONTENT"}},
{"QueryInOrder", fields{Raw: raw, Flags: QueryInOrder}, redis.Args{raw, "LIMIT", 0, 0, "INORDER"}},
{"QueryWithPayloads", fields{Raw: raw, Flags: QueryWithPayloads}, redis.Args{raw, "LIMIT", 0, 0, "WITHPAYLOADS"}},
{"QueryWithScores", fields{Raw: raw, Flags: QueryWithScores}, redis.Args{raw, "LIMIT", 0, 0, "WITHSCORES"}},
{"InKeys", fields{Raw: raw, InKeys: []string{"test_key"}}, redis.Args{raw, "LIMIT", 0, 0, "INKEYS", 1, "test_key"}},
{"ReturnFields", fields{Raw: raw, ReturnFields: []string{"test_field"}}, redis.Args{raw, "LIMIT", 0, 0, "RETURN", 1, "test_field"}},
{"Language", fields{Raw: raw, Language: "chinese"}, redis.Args{raw, "LIMIT", 0, 0, "LANGUAGE", "chinese"}},
{"Expander", fields{Raw: raw, Expander: "test_expander"}, redis.Args{raw, "LIMIT", 0, 0, "EXPANDER", "test_expander"}},
{"Scorer", fields{Raw: raw, Scorer: "test_scorer"}, redis.Args{raw, "LIMIT", 0, 0, "SCORER", "test_scorer"}},
{"SortBy", fields{Raw: raw, SortBy: &SortingKey{
Field: "test_field",
Ascending: true}}, redis.Args{raw, "LIMIT", 0, 0, "SORTBY", "test_field", "ASC"}},
{"HighlightOpts", fields{Raw: raw, HighlightOpts: &HighlightOptions{
Fields: []string{"test_field"},
Tags: [2]string{"<tag>", "</tag>"},
}}, redis.Args{raw, "LIMIT", 0, 0, "HIGHLIGHT", "FIELDS", 1, "test_field", "TAGS", "<tag>", "</tag>"}},
{"SummarizeOpts", fields{Raw: raw, SummarizeOpts: &SummaryOptions{
Fields: []string{"test_field"},
FragmentLen: 20,
NumFragments: 3,
Separator: "...",
}}, redis.Args{raw, "LIMIT", 0, 0, "SUMMARIZE", "FIELDS", 1, "test_field", "LEN", 20, "FRAGS", 3, "SEPARATOR", "..."}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
q := Query{
Raw: tt.fields.Raw,
Flags: tt.fields.Flags,
InKeys: tt.fields.InKeys,
ReturnFields: tt.fields.ReturnFields,
Language: tt.fields.Language,
Expander: tt.fields.Expander,
Scorer: tt.fields.Scorer,
SortBy: tt.fields.SortBy,
HighlightOpts: tt.fields.HighlightOpts,
SummarizeOpts: tt.fields.SummarizeOpts,
}
if g := q.serialize(); !reflect.DeepEqual(g, tt.want) {
t.Errorf("serialize() = %v, want %v", g, tt.want)
}
})
}
}