chatGPT本地知识库-私有数据知识库-列出qdrant集合中的所有points

想要列出某一个集合里的所有向量数据points,可以根据文档使用下面这个接口

POST /collections/{collection_name}/points/scroll

{
    "filter": {
        "must": [
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "limit": 1,
    "with_payload": true,
    "with_vector": false
}

滚动API将以逐页的方式返回与过滤器匹配的所有点。

所有结果点都按ID排序。要查询下一页,需要在偏移字段中指定最大的已看到的ID。为了方便起见,该ID也在next_page_offset字段中返回。如果next_page_offset字段的值为null,则达到了最后一页。

{
    "result": {
        "next_page_offset": 1,
        "points": [
            {
                "id": 0,
                "payload": {
                    "color": "red"
                }
            }
        ]
    },
    "status": "ok",
    "time": 0.0001}


注意,这个offset偏移字段,只允许无符号整型,或者uuid,其他形式会报错

//查询数据列表
func GetPoints(collectionName string, limit uint, offset interface{}) ([]byte, error) {
   // 构造请求体
   requestBody := map[string]interface{}{
      "limit":        limit,
      "offset":       offset,
      "with_payload": true,
      "with_vector":  false,
   }
   requestBodyBytes, err := json.Marshal(requestBody)
   if err != nil {
      return nil, err
   }

   // 构造请求
   url := fmt.Sprintf("http://%s:%s/collections/%s/points/scroll", QdrantBase, QdrantPort, collectionName)
   request, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(requestBodyBytes))
   if err != nil {
      return nil, err
   }
   request.Header.Set("Content-Type", "application/json")

   // 发送请求
   client := http.DefaultClient
   response, err := client.Do(request)
   if err != nil {
      return nil, err
   }
   defer response.Body.Close()

   // 处理响应
   responseBody, err := ioutil.ReadAll(response.Body)
   if err != nil {
      return nil, err
   }
   return responseBody, nil
}


测试用例:

func TestGetPoints(t *testing.T) {

   collectionName := "data_collection"
   limit := 1
   offset := "16c802db-b52f-434a-b038-7777edd0b5c9"
   points, err := GetPoints(collectionName, uint(limit), offset)
   if err != nil {
      t.Errorf("Error searching points: %v", err)
   }
   log.Println(string(points))
}