Я получаю ошибку, когда делаю запрос к 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 значением?