Я получаю ошибку, когда делаю запрос к Qdrant

Когда я создаю коллекцию, заполняю её и потом делаю запрос, то все работает как ожидается:

package main

import (
    "context"
    "log"
    "github.com/qdrant/go-client/qdrant"
)

func main() {
    client, err := qdrant.NewClient(&qdrant.Config{
        Host: "localhost",
        Port: 6334,
    })
    if err != nil {
        log.Println("client, err := qdrant.NewClient", err)
    }

    
    client.DeleteCollection(context.Background(), "test_collection")
    log.Println("Collection deleted")
    
    
    client.CreateCollection(context.Background(), &qdrant.CreateCollection{
        CollectionName: "test_collection",
        VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
            Size:     3,
            Distance: qdrant.Distance_Cosine,
        }),
    })
    log.Println("Collection created")

    

    res, err := client.Upsert(context.Background(), &qdrant.UpsertPoints{
        CollectionName: "test_collection",
        Points: []*qdrant.PointStruct{
            {
                Id:      qdrant.NewIDNum(1),
                Vectors: qdrant.NewVectors(0.9, 0.1, 0.1),
                Payload: qdrant.NewValueMap(map[string]any{"color": "red"}),
            },
            {
                Id:      qdrant.NewIDNum(2),
                Vectors: qdrant.NewVectors(0.1, 0.9, 0.1),
                Payload: qdrant.NewValueMap(map[string]any{"color": "green"}),
            },
            {
                Id:      qdrant.NewIDNum(3),
                Vectors: qdrant.NewVectors(0.1, 0.1, 0.9),
                Payload: qdrant.NewValueMap(map[string]any{"color": "blue"}),
            },
        },
    })
    if err!=nil {
        log.Println("res, err := client.Upsert :",err)
    }
    log.Println("Upserted")
    log.Println("OperationId:",res.OperationId,"Status:",res.Status)
    
    
    SP, err := client.Query(context.Background(), &qdrant.QueryPoints{
        CollectionName: "test_collection",
        Query:          qdrant.NewQuery(0.8,0.1,0.1),
        WithPayload:    qdrant.NewWithPayload(true),
        WithVectors:    qdrant.NewWithVectors(true),
    })
    if err!=nil {
        log.Println("SP, err := client.Query :", err)
    }
    
    if len(SP)!=0 {
        for i,_ := range SP {
            log.Println("Id:",SP[i].Id,"Vectors:", SP[i].Vectors/*.String()*/, "Score:", SP[i].Score, "Payload:", SP[i].Payload)
        }
    }
    
}

В ответ получаю:

2025/09/01 17:05:06 Collection deleted
2025/09/01 17:05:06 Collection created
2025/09/01 17:05:06 Upserted
2025/09/01 17:05:06 OperationId: 0xc000388848 Status: Acknowledged
2025/09/01 17:05:06 Id: num:1 Vectors: vector:{data:0.9878784 data:0.10976427 data:0.10976427} Score: 0.9998175 Payload: map[color:string_value:"red"]
2025/09/01 17:05:06 Id: num:2 Vectors: vector:{data:0.10976427 data:0.9878784 data:0.10976427} Score: 0.24319886 Payload: map[color:string_value:"green"]
2025/09/01 17:05:06 Id: num:3 Vectors: vector:{data:0.10976427 data:0.10976427 data:0.9878784} Score: 0.24319884 Payload: map[color:string_value:"blue"]

Но, когда я делаю только запрос к СУБД:

package main

import (
    "context"
    "log"
    "github.com/qdrant/go-client/qdrant"
)

func main() {
    client, err := qdrant.NewClient(&qdrant.Config{
        Host: "localhost",
        Port: 6334,
    })
    if err != nil {
        log.Println("client, err := qdrant.NewClient", err)
    }
    
    SP, err := client.Query(context.Background(), &qdrant.QueryPoints{
        CollectionName: "test_collection",
        Query:          qdrant.NewQuery(0.8,0.1,0.1),
        WithPayload:    qdrant.NewWithPayload(true),
        WithVectors:    qdrant.NewWithVectors(true),
    })
    if err!=nil {
        log.Println("SP, err := client.Query :", err)
    }
    
    if len(SP)!=0 {
        for i,_ := range SP {
            log.Println("Id:",SP[i].Id,"Vectors:", SP[i].Vectors/*.String()*/, "Score:", SP[i].Score, "Payload:", SP[i].Payload)
        }
    }
    
}

, то получаю ошибку:

2025/09/01 17:07:54 SP, err := client.Query : Query() failed: test_collection: rpc error: code = Internal desc = Service internal error: 1 of 1 read operations failed:
  Service internal error: task 637 panicked with message "called `Result::unwrap()` on an `Err` value: OutputTooSmall { expected: 4, actual: 0 }"

Однако, если я комментирую строку WithPayload:

package main

import (
    "context"
    "log"
    "github.com/qdrant/go-client/qdrant"
)

func main() {
    client, err := qdrant.NewClient(&qdrant.Config{
        Host: "localhost",
        Port: 6334,
    })
    if err != nil {
        log.Println("client, err := qdrant.NewClient", err)
    }
    
    SP, err := client.Query(context.Background(), &qdrant.QueryPoints{
        CollectionName: "test_collection",
        Query:          qdrant.NewQuery(0.8,0.1,0.1),
        //WithPayload:    qdrant.NewWithPayload(true),
        WithVectors:    qdrant.NewWithVectors(true),
    })
    if err!=nil {
        log.Println("SP, err := client.Query :", err)
    }
    
    if len(SP)!=0 {
        for i,_ := range SP {
            log.Println("Id:",SP[i].Id,"Vectors:", SP[i].Vectors/*.String()*/, "Score:", SP[i].Score, "Payload:", SP[i].Payload)
        }
    }
    
}

, то снова все работает как положено:

2025/09/01 17:09:19 Id: num:1 Vectors: vector:{data:0.9878784  data:0.10976427  data:0.10976427} Score: 0.9998175 Payload: map[]
2025/09/01 17:09:19 Id: num:2 Vectors: vector:{data:0.10976427  data:0.9878784  data:0.10976427} Score: 0.24319886 Payload: map[]
2025/09/01 17:09:19 Id: num:3 Vectors: vector:{data:0.10976427  data:0.10976427  data:0.9878784} Score: 0.24319884 Payload: map[]

Как мне исправить эту ошибку, если я хочу получить в ответе на запрос строку с Payload значением?


Ответы (0 шт):