diff --git a/redisearch/query.go b/redisearch/query.go index dedb3f6..9122990 100644 --- a/redisearch/query.go +++ b/redisearch/query.go @@ -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) } diff --git a/redisearch/query_test.go b/redisearch/query_test.go index 23dc911..32b1441 100644 --- a/redisearch/query_test.go +++ b/redisearch/query_test.go @@ -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) { @@ -31,4 +31,70 @@ func TestPaging_serialize(t *testing.T) { } }) } -} \ No newline at end of file +} + +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{"", ""}, + }}, redis.Args{raw, "LIMIT", 0, 0, "HIGHLIGHT", "FIELDS", 1, "test_field", "TAGS", "", ""}}, + {"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) + } + }) + } +}