代码之家  ›  专栏  ›  技术社区  ›  SahilW

go redis FTSearch返回空结果

  •  0
  • SahilW  · 技术社区  · 11 月前

    我能够使用go redis创建索引并加载数据。此外,我可以搜索,但只能通过CLI。这意味着索引是正确创建的,并且是可搜索的。它返回正确的结果。

    但当我尝试以编程方式搜索数据时,它返回:

    redis: 2024/07/26 19:27:10 pool.go:368: Conn has unread data
    {Total:0 Docs:[]}
    

    我使用以下示例: https://github.com/redis/go-redis/blob/master/search_test.go#L128-L138

    参考代码:

    // Create index
    _, err := client.FTCreate(ctx, "txt", &redis.FTCreateOptions{}, &redis.FieldSchema{FieldName: "txt", FieldType: redis.SearchFieldTypeText}).Result()
    
    // Add data
    client.HSet(ctx, "doc1", "txt", "foo baz")
    client.HSet(ctx, "doc2", "txt", "foo bar")
    
    // Search
    res, err := client.FTSearchWithArgs(ctx, "txt", "foo ~bar", &redis.FTSearchOptions{WithScores: true, Limit: 50}).Result()
    if err != nil {
        fmt.Printf("\nerr: %v", err)
    }
    

    这同样适用于 client.JSONSet 有人能帮我理解这里出了什么问题吗?

    1 回复  |  直到 11 月前
        1
  •  1
  •   slorello    11 月前

    在创建客户端时将协议更改为2-以下代码有效:

    package main
    
    import (
        "context"
        "fmt"
        "github.com/redis/go-redis/v9"
    )
    
    var ctx = context.Background()
    
    func main() {
        var client *redis.Client
    
        client = redis.NewClient(&redis.Options{
            Addr:     "localhost:6379",
            Protocol: 2, // this right here
        })
    
        _, err := client.FTCreate(ctx, "txt", &redis.FTCreateOptions{}, &redis.FieldSchema{FieldName: "txt", FieldType: redis.SearchFieldTypeText}).Result()
        if err != nil {
            fmt.Printf("\nerr: %v", err)
        }
    
        // Add data
        client.HSet(ctx, "doc1", "txt", "foo baz")
        client.HSet(ctx, "doc2", "txt", "foo bar")
    
        // Search
        res, err := client.FTSearchWithArgs(ctx, "txt", "foo ~bar", &redis.FTSearchOptions{WithScores: true, Limit: 50}).Result()
        if err != nil {
            fmt.Printf("\nerr: %v", err)
        } else {
            fmt.Printf("\nRetrieved :%d documents", len(res.Docs))
        }
    }
    
    

    当go redis客户端通过RESP3(redis-go客户端的默认设置)与redis接口时,go redis客户机读取结果的方式似乎有问题。

    推荐文章