mirror of
https://github.com/redis/go-redis.git
synced 2025-04-16 09:23:06 +03:00
* fix (#3220) * LOAD has NO AS param(https://redis.io/docs/latest/commands/ft.aggregate/) * fix typo: WITHCOUT -> WITHCOUNT * fix (#3220): * Compatible with known RediSearch issue in test * fix (#3220) * fixed the calculation bug of the count of load params * test should not include special condition * return errors when they occur --------- Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com> Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com>
This commit is contained in:
parent
c29d399be6
commit
7e517ec4a1
@ -514,12 +514,16 @@ func FTAggregateQuery(query string, options *FTAggregateOptions) AggregateQuery
|
||||
}
|
||||
if options.Load != nil {
|
||||
queryArgs = append(queryArgs, "LOAD", len(options.Load))
|
||||
index, count := len(queryArgs)-1, 0
|
||||
for _, load := range options.Load {
|
||||
queryArgs = append(queryArgs, load.Field)
|
||||
count++
|
||||
if load.As != "" {
|
||||
queryArgs = append(queryArgs, "AS", load.As)
|
||||
count += 2
|
||||
}
|
||||
}
|
||||
queryArgs[index] = count
|
||||
}
|
||||
|
||||
if options.Timeout > 0 {
|
||||
@ -677,12 +681,10 @@ func (cmd *AggregateCmd) String() string {
|
||||
func (cmd *AggregateCmd) readReply(rd *proto.Reader) (err error) {
|
||||
data, err := rd.ReadSlice()
|
||||
if err != nil {
|
||||
cmd.err = err
|
||||
return err
|
||||
}
|
||||
cmd.val, err = ProcessAggregateResult(data)
|
||||
if err != nil {
|
||||
cmd.err = err
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@ -713,12 +715,16 @@ func (c cmdable) FTAggregateWithArgs(ctx context.Context, index string, query st
|
||||
}
|
||||
if options.Load != nil {
|
||||
args = append(args, "LOAD", len(options.Load))
|
||||
index, count := len(args)-1, 0
|
||||
for _, load := range options.Load {
|
||||
args = append(args, load.Field)
|
||||
count++
|
||||
if load.As != "" {
|
||||
args = append(args, "AS", load.As)
|
||||
count += 2
|
||||
}
|
||||
}
|
||||
args[index] = count
|
||||
}
|
||||
if options.Timeout > 0 {
|
||||
args = append(args, "TIMEOUT", options.Timeout)
|
||||
@ -1420,7 +1426,7 @@ func (cmd *FTInfoCmd) readReply(rd *proto.Reader) (err error) {
|
||||
}
|
||||
cmd.val, err = parseFTInfo(data)
|
||||
if err != nil {
|
||||
cmd.err = err
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -1513,12 +1519,11 @@ func (cmd *FTSpellCheckCmd) RawResult() (interface{}, error) {
|
||||
func (cmd *FTSpellCheckCmd) readReply(rd *proto.Reader) (err error) {
|
||||
data, err := rd.ReadSlice()
|
||||
if err != nil {
|
||||
cmd.err = err
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
cmd.val, err = parseFTSpellCheck(data)
|
||||
if err != nil {
|
||||
cmd.err = err
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -1702,12 +1707,11 @@ func (cmd *FTSearchCmd) RawResult() (interface{}, error) {
|
||||
func (cmd *FTSearchCmd) readReply(rd *proto.Reader) (err error) {
|
||||
data, err := rd.ReadSlice()
|
||||
if err != nil {
|
||||
cmd.err = err
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
cmd.val, err = parseFTSearch(data, cmd.options.NoContent, cmd.options.WithScores, cmd.options.WithPayloads, cmd.options.WithSortKeys)
|
||||
if err != nil {
|
||||
cmd.err = err
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -269,6 +269,8 @@ var _ = Describe("RediSearch commands Resp 2", Label("search"), func() {
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res1.Total).To(BeEquivalentTo(int64(1)))
|
||||
|
||||
_, err = client.FTSearch(ctx, "idx_not_exist", "only in the body").Result()
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
|
||||
It("should FTSpellCheck", Label("search", "ftcreate", "ftsearch", "ftspellcheck"), func() {
|
||||
@ -643,11 +645,25 @@ var _ = Describe("RediSearch commands Resp 2", Label("search"), func() {
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res.Rows[0].Fields["t2"]).To(BeEquivalentTo("world"))
|
||||
|
||||
options = &redis.FTAggregateOptions{Load: []redis.FTAggregateLoad{{Field: "t2", As: "t2alias"}}}
|
||||
res, err = client.FTAggregateWithArgs(ctx, "idx1", "*", options).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res.Rows[0].Fields["t2alias"]).To(BeEquivalentTo("world"))
|
||||
|
||||
options = &redis.FTAggregateOptions{Load: []redis.FTAggregateLoad{{Field: "t1"}, {Field: "t2", As: "t2alias"}}}
|
||||
res, err = client.FTAggregateWithArgs(ctx, "idx1", "*", options).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res.Rows[0].Fields["t1"]).To(BeEquivalentTo("hello"))
|
||||
Expect(res.Rows[0].Fields["t2alias"]).To(BeEquivalentTo("world"))
|
||||
|
||||
options = &redis.FTAggregateOptions{LoadAll: true}
|
||||
res, err = client.FTAggregateWithArgs(ctx, "idx1", "*", options).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res.Rows[0].Fields["t1"]).To(BeEquivalentTo("hello"))
|
||||
Expect(res.Rows[0].Fields["t2"]).To(BeEquivalentTo("world"))
|
||||
|
||||
_, err = client.FTAggregateWithArgs(ctx, "idx_not_exist", "*", &redis.FTAggregateOptions{}).Result()
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
|
||||
It("should FTAggregate with scorer and addscores", Label("search", "ftaggregate", "NonRedisEnterprise"), func() {
|
||||
@ -1268,6 +1284,7 @@ var _ = Describe("RediSearch commands Resp 2", Label("search"), func() {
|
||||
val, err = client.FTCreate(ctx, "idx_hash", ftCreateOptions, schema...).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(val).To(Equal("OK"))
|
||||
WaitForIndexing(client, "idx_hash")
|
||||
|
||||
ftSearchOptions := &redis.FTSearchOptions{
|
||||
DialectVersion: 4,
|
||||
|
Loading…
x
Reference in New Issue
Block a user