mirror of
https://github.com/redis/go-redis.git
synced 2025-04-17 20:17:02 +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 {
|
if options.Load != nil {
|
||||||
queryArgs = append(queryArgs, "LOAD", len(options.Load))
|
queryArgs = append(queryArgs, "LOAD", len(options.Load))
|
||||||
|
index, count := len(queryArgs)-1, 0
|
||||||
for _, load := range options.Load {
|
for _, load := range options.Load {
|
||||||
queryArgs = append(queryArgs, load.Field)
|
queryArgs = append(queryArgs, load.Field)
|
||||||
|
count++
|
||||||
if load.As != "" {
|
if load.As != "" {
|
||||||
queryArgs = append(queryArgs, "AS", load.As)
|
queryArgs = append(queryArgs, "AS", load.As)
|
||||||
|
count += 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
queryArgs[index] = count
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.Timeout > 0 {
|
if options.Timeout > 0 {
|
||||||
@ -677,12 +681,10 @@ func (cmd *AggregateCmd) String() string {
|
|||||||
func (cmd *AggregateCmd) readReply(rd *proto.Reader) (err error) {
|
func (cmd *AggregateCmd) readReply(rd *proto.Reader) (err error) {
|
||||||
data, err := rd.ReadSlice()
|
data, err := rd.ReadSlice()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmd.err = err
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd.val, err = ProcessAggregateResult(data)
|
cmd.val, err = ProcessAggregateResult(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmd.err = err
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -713,12 +715,16 @@ func (c cmdable) FTAggregateWithArgs(ctx context.Context, index string, query st
|
|||||||
}
|
}
|
||||||
if options.Load != nil {
|
if options.Load != nil {
|
||||||
args = append(args, "LOAD", len(options.Load))
|
args = append(args, "LOAD", len(options.Load))
|
||||||
|
index, count := len(args)-1, 0
|
||||||
for _, load := range options.Load {
|
for _, load := range options.Load {
|
||||||
args = append(args, load.Field)
|
args = append(args, load.Field)
|
||||||
|
count++
|
||||||
if load.As != "" {
|
if load.As != "" {
|
||||||
args = append(args, "AS", load.As)
|
args = append(args, "AS", load.As)
|
||||||
|
count += 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
args[index] = count
|
||||||
}
|
}
|
||||||
if options.Timeout > 0 {
|
if options.Timeout > 0 {
|
||||||
args = append(args, "TIMEOUT", options.Timeout)
|
args = append(args, "TIMEOUT", options.Timeout)
|
||||||
@ -1420,7 +1426,7 @@ func (cmd *FTInfoCmd) readReply(rd *proto.Reader) (err error) {
|
|||||||
}
|
}
|
||||||
cmd.val, err = parseFTInfo(data)
|
cmd.val, err = parseFTInfo(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmd.err = err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -1513,12 +1519,11 @@ func (cmd *FTSpellCheckCmd) RawResult() (interface{}, error) {
|
|||||||
func (cmd *FTSpellCheckCmd) readReply(rd *proto.Reader) (err error) {
|
func (cmd *FTSpellCheckCmd) readReply(rd *proto.Reader) (err error) {
|
||||||
data, err := rd.ReadSlice()
|
data, err := rd.ReadSlice()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmd.err = err
|
return err
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
cmd.val, err = parseFTSpellCheck(data)
|
cmd.val, err = parseFTSpellCheck(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmd.err = err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -1702,12 +1707,11 @@ func (cmd *FTSearchCmd) RawResult() (interface{}, error) {
|
|||||||
func (cmd *FTSearchCmd) readReply(rd *proto.Reader) (err error) {
|
func (cmd *FTSearchCmd) readReply(rd *proto.Reader) (err error) {
|
||||||
data, err := rd.ReadSlice()
|
data, err := rd.ReadSlice()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmd.err = err
|
return err
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
cmd.val, err = parseFTSearch(data, cmd.options.NoContent, cmd.options.WithScores, cmd.options.WithPayloads, cmd.options.WithSortKeys)
|
cmd.val, err = parseFTSearch(data, cmd.options.NoContent, cmd.options.WithScores, cmd.options.WithPayloads, cmd.options.WithSortKeys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmd.err = err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -269,6 +269,8 @@ var _ = Describe("RediSearch commands Resp 2", Label("search"), func() {
|
|||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(res1.Total).To(BeEquivalentTo(int64(1)))
|
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() {
|
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(err).NotTo(HaveOccurred())
|
||||||
Expect(res.Rows[0].Fields["t2"]).To(BeEquivalentTo("world"))
|
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}
|
options = &redis.FTAggregateOptions{LoadAll: true}
|
||||||
res, err = client.FTAggregateWithArgs(ctx, "idx1", "*", options).Result()
|
res, err = client.FTAggregateWithArgs(ctx, "idx1", "*", options).Result()
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(res.Rows[0].Fields["t1"]).To(BeEquivalentTo("hello"))
|
Expect(res.Rows[0].Fields["t1"]).To(BeEquivalentTo("hello"))
|
||||||
Expect(res.Rows[0].Fields["t2"]).To(BeEquivalentTo("world"))
|
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() {
|
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()
|
val, err = client.FTCreate(ctx, "idx_hash", ftCreateOptions, schema...).Result()
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(val).To(Equal("OK"))
|
Expect(val).To(Equal("OK"))
|
||||||
|
WaitForIndexing(client, "idx_hash")
|
||||||
|
|
||||||
ftSearchOptions := &redis.FTSearchOptions{
|
ftSearchOptions := &redis.FTSearchOptions{
|
||||||
DialectVersion: 4,
|
DialectVersion: 4,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user