VectoRex Go客户端SDK详解

【免费下载链接】VectoRex VectoRex 是一个 纯 Java 实现 的高性能、可扩展的向量数据库,专为现代 AI 和大数据应用设计。它结合了高效的向量索引(HNSW)和强大的标量索引(倒排索引、范围索引),支持复杂的混合查询(向量 + 标量),适用于推荐系统、图像搜索、自然语言处理等场景。 【免费下载链接】VectoRex 项目地址: https://gitcode.com/javpower/VectoRex

VectoRex Go客户端是一个功能强大的SDK,专为与VectoRex服务交互而设计。本文将详细介绍如何安装、初始化、使用其功能模块、处理响应与异常,并提供实战示例代码。

VectoRex Go客户端的安装与初始化

VectoRex Go客户端是一个功能强大的SDK,专为与VectoRex服务交互而设计。本节将详细介绍如何安装和初始化该客户端,确保您能够快速开始使用其功能。

1. 安装VectoRex Go客户端

安装过程非常简单,只需使用Go的包管理工具go get即可完成:

go get github.com/javpower/VectoRex/vectorex-client-go

安装完成后,您可以在项目中导入该包:

import "vectorex-client-go/client"

2. 初始化客户端

初始化客户端是使用VectoRex Go SDK的第一步。您需要提供VectoRex服务的基础URL、用户名和密码:

package main

import (
    "fmt"
    "vectorex-client-go/client"
)

func main() {
    // 初始化客户端
    client, err := client.NewVectorRexClient("https://your-vectorrex-service.com", "username", "password")
    if err != nil {
        fmt.Println("Failed to initialize client:", err)
        return
    }
    defer client.Close()

    fmt.Println("Client initialized successfully!")
}
参数说明
  • baseUri:VectoRex服务的URL地址。
  • username:登录VectoRex服务的用户名。
  • password:登录VectoRex服务的密码。
返回值
  • *VectorRexClient:返回一个客户端实例,用于后续操作。
  • error:如果初始化失败,返回错误信息。

3. 验证客户端连接

初始化完成后,建议进行一次简单的操作(如获取集合列表)以验证连接是否正常:

collections, err := client.GetCollections()
if err != nil {
    fmt.Println("Failed to fetch collections:", err)
    return
}
fmt.Println("Collections:", collections)

4. 客户端配置选项

VectoRex Go客户端支持一些可选的配置选项,例如设置超时时间或自定义HTTP客户端:

// 自定义HTTP客户端
customHTTPClient := &http.Client{
    Timeout: time.Second * 30,
}

// 初始化客户端时传入自定义配置
client, err := client.NewVectorRexClientWithOptions(
    "https://your-vectorrex-service.com",
    "username",
    "password",
    client.WithHTTPClient(customHTTPClient),
)
if err != nil {
    fmt.Println("Failed to initialize client:", err)
    return
}
支持的配置选项
  • WithHTTPClient:自定义HTTP客户端。
  • WithTimeout:设置请求超时时间。

5. 常见问题

5.1 连接失败

如果初始化失败,请检查以下内容:

  • 确保baseUri正确无误。
  • 确保用户名和密码正确。
  • 确保网络连接正常。
5.2 依赖冲突

如果安装过程中出现依赖冲突,可以尝试清理Go模块缓存:

go clean -modcache

6. 总结

通过以上步骤,您已经成功安装并初始化了VectoRex Go客户端。接下来,您可以开始使用客户端提供的丰富功能,例如创建集合、添加数据或执行查询操作。

VectoRex Go客户端的功能模块解析

VectoRex Go客户端SDK是一个功能强大的工具,用于与VectoRex服务进行交互。它提供了丰富的功能模块,包括集合管理、数据操作和查询构建等。以下是对这些功能模块的详细解析。

1. 集合管理模块

集合是VectoRex中用于存储数据的基本单元。Go客户端提供了以下功能来管理集合:

1.1 创建集合

通过VectoRexCollectionReq结构体定义集合的元数据,包括集合名称、向量字段和标量字段。以下是一个示例代码:

req := VectoRexCollectionReq{
    CollectionName: "example_collection",
    VectorFields: []VectorField{
        {
            Name:        "vector",
            MetricType:  MetricTypeFLOAT_CANBERRA_DISTANCE,
            Dimensions:  128,
        },
    },
    ScalarFields: []ScalarField{
        {
            Name:       "id",
            IsPrimaryKey: true,
        },
    },
}
response, err := client.CreateCollection(req)
if err != nil {
    log.Fatal(err)
}
if response.IsSuccess() {
    log.Println("集合创建成功")
}
1.2 删除集合

通过集合名称删除指定的集合:

response, err := client.DelCollection("example_collection")
if err != nil {
    log.Fatal(err)
}
if response.IsSuccess() {
    log.Println("集合删除成功")
}
1.3 获取集合列表

获取所有集合的列表:

collections, err := client.GetCollections()
if err != nil {
    log.Fatal(err)
}
for _, collection := range collections {
    log.Printf("集合名称: %s", collection.CollectionName)
}

2. 数据操作模块

数据操作模块提供了对集合中数据的增删改查功能。

2.1 添加数据

通过CollectionDataAddReq结构体定义要添加的数据:

req := CollectionDataAddReq{
    CollectionName: "example_collection",
    Metadata: map[string]interface{}{
        "id":     1,
        "vector": []float32{0.1, 0.2, 0.3},
    },
}
response, err := client.AddCollectionData(req)
if err != nil {
    log.Fatal(err)
}
if response.IsSuccess() {
    log.Println("数据添加成功")
}
2.2 更新数据

更新数据与添加数据类似,但需要指定数据的唯一标识:

req := CollectionDataAddReq{
    CollectionName: "example_collection",
    Metadata: map[string]interface{}{
        "id":     1,
        "vector": []float32{0.4, 0.5, 0.6},
    },
}
response, err := client.UpdateCollectionData(req)
if err != nil {
    log.Fatal(err)
}
if response.IsSuccess() {
    log.Println("数据更新成功")
}
2.3 删除数据

通过CollectionDataDelReq结构体删除指定数据:

req := CollectionDataDelReq{
    CollectionName: "example_collection",
    DataID:        "1",
}
response, err := client.DeleteCollectionData(req)
if err != nil {
    log.Fatal(err)
}
if response.IsSuccess() {
    log.Println("数据删除成功")
}

3. 查询构建模块

查询构建模块提供了灵活的查询条件构建功能,支持向量查询和标量查询。

3.1 构建查询条件

通过QueryBuilder构建查询条件:

builder := QueryBuilder{
    CollectionName: "example_collection",
    Query: []ConditionField{
        {
            FieldName: "id",
            Operator:  "eq",
            Value:     1,
        },
    },
    Vector:        []float32{0.1, 0.2, 0.3},
    VectorFieldName: "vector",
    TopK:          10,
}
3.2 执行查询

执行查询并获取结果:

results, err := client.QueryCollectionData(&builder)
if err != nil {
    log.Fatal(err)
}
for _, result := range results {
    log.Printf("数据ID: %s, 分数: %f", result.ID, result.Score)
}
3.3 分页查询

支持分页查询:

builder.PageIndex = 1
builder.PageSize = 10
pageResult, err := client.PageCollectionData(&builder)
if err != nil {
    log.Fatal(err)
}
log.Printf("总记录数: %d", pageResult.Total)
for _, result := range pageResult.Data {
    log.Printf("数据ID: %s", result.ID)
}

4. 响应处理模块

所有操作均返回ServerResponse对象,可以通过IsSuccess()方法判断操作是否成功,并通过GetData()方法获取返回的数据。

response, err := client.CreateCollection(req)
if err != nil {
    log.Fatal(err)
}
if response.IsSuccess() {
    log.Println("操作成功")
} else {
    log.Printf("操作失败: %s", response.GetMsg())
}

通过以上功能模块的解析,可以看出VectoRex Go客户端SDK提供了完整的API,方便开发者快速集成和使用VectoRex服务。

VectoRex Go客户端的响应处理与异常管理

在开发过程中,正确处理服务端返回的响应和异常是确保应用健壮性的关键。VectoRex Go客户端提供了完善的响应处理和异常管理机制,帮助开发者高效地处理服务端返回的数据和错误信息。本节将详细介绍如何利用这些机制优化代码逻辑。

响应处理

响应结构

VectoRex Go客户端的响应通过 ServerResponse 结构体封装,包含以下字段:

  • Status: 响应状态码,标识请求的成功或失败。
  • Msg: 响应消息,通常用于描述错误信息。
  • Data: 响应数据,类型为泛型,可根据实际需求解析。
type ServerResponse struct {
    Status int         `json:"status"`
    Msg    string      `json:"msg"`
    Data   interface{} `json:"data"`
}
响应解析

通过 GetData 方法可以将响应数据解析为指定的类型。例如,解析查询结果:

func (r *ServerResponse) GetData(dataType interface{}) error {
    // 解析逻辑
}
示例代码

以下是一个处理查询结果的示例:

response, err := client.QueryCollectionData(queryBuilder)
if err != nil {
    log.Fatalf("查询失败: %v", err)
}

var results []VectorSearchResult
if err := response.GetData(&results); err != nil {
    log.Fatalf("解析数据失败: %v", err)
}

for _, result := range results {
    fmt.Printf("ID: %s, Score: %f\n", result.ID, result.Score)
}

异常管理

错误类型

VectoRex Go客户端可能返回以下类型的错误:

  1. 网络错误:如连接超时或请求失败。
  2. 服务端错误:如无效的请求参数或权限不足。
  3. 解析错误:如响应数据格式不符合预期。
错误处理

通过检查返回的 errorServerResponse 的状态码,可以分类处理异常:

response, err := client.CreateCollection(createReq)
if err != nil {
    // 处理网络或客户端错误
    log.Fatalf("请求失败: %v", err)
}

if !response.IsSuccess() {
    // 处理服务端错误
    log.Fatalf("服务端错误: %s", response.Msg)
}

// 处理成功逻辑
fmt.Println("集合创建成功")
重试机制

对于网络波动或临时性错误,可以实现简单的重试逻辑:

maxRetries := 3
for i := 0; i < maxRetries; i++ {
    response, err := client.QueryCollectionData(queryBuilder)
    if err == nil && response.IsSuccess() {
        break
    }
    time.Sleep(time.Second * 2)
}

总结

通过合理利用 ServerResponse 和错误处理机制,可以显著提升应用的稳定性和用户体验。以下是一个完整的流程图,展示了响应处理和异常管理的逻辑:

mermaid

通过上述方法,开发者可以高效地处理 VectoRex Go客户端的响应和异常,确保应用的健壮性和可靠性。

VectoRex Go客户端的示例代码与实战

1. 初始化客户端与创建集合

以下是一个完整的示例代码,展示如何初始化 VectorRexClient 并创建一个新的集合:

package main

import (
	"fmt"
	"github.com/javpower/VectoRex/vectorex-client-go/client"
	"github.com/javpower/VectoRex/vectorex-client-go/entity"
	"github.com/javpower/VectoRex/vectorex-client-go/req"
)

func main() {
	// 初始化客户端
	client, err := client.NewVectorRexClient("http://your-vectorrex-service-base-uri", "username", "password")
	if err != nil {
		fmt.Println("Failed to initialize client:", err)
		return
	}
	defer client.Close()

	// 定义集合的向量字段和标量字段
	vectorFields := []entity.VectorField{
		{
			Name:       "vector",
			MetricType: entity.FloatCosineDistance,
			Dimensions: 128,
		},
	}
	scalarFields := []entity.ScalarField{
		{
			Name:         "id",
			IsPrimaryKey: true,
		},
	}

	// 创建集合请求
	createReq := req.VectoRexCollectionReq{
		CollectionName: "example_collection",
		VectorFields:   vectorFields,
		ScalarFields:   scalarFields,
	}

	// 调用创建集合接口
	resp, err := client.CreateCollection(createReq)
	if err != nil {
		fmt.Println("Failed to create collection:", err)
		return
	}
	fmt.Println("Collection created successfully:", resp)
}

2. 添加数据到集合

以下代码展示了如何向集合中添加数据:

// 定义数据
metadata := map[string]interface{}{
	"id":     "1",
	"vector": []float32{0.1, 0.2, 0.3},
}

// 构建添加数据请求
addReq := req.CollectionDataAddReq{
	CollectionName: "example_collection",
	Metadata:       metadata,
}

// 调用添加数据接口
addResp, err := client.AddCollectionData(addReq)
if err != nil {
	fmt.Println("Failed to add data:", err)
	return
}
fmt.Println("Data added successfully:", addResp)

3. 查询数据

以下代码展示了如何查询集合中的数据:

// 构建查询条件
queryBuilder := req.NewQueryBuilder().
	SetCollectionName("example_collection").
	SetTopK(10)

// 调用查询接口
results, err := client.QueryCollectionData(queryBuilder)
if err != nil {
	fmt.Println("Failed to query data:", err)
	return
}

// 打印查询结果
for _, result := range results {
	fmt.Printf("ID: %s, Score: %f\n", result.ID, result.Score)
}

4. 分页查询数据

以下代码展示了如何进行分页查询:

// 构建分页查询条件
queryBuilder := req.NewQueryBuilder().
	SetCollectionName("example_collection").
	SetPageIndex(1).
	SetPageSize(10)

// 调用分页查询接口
pageResult, err := client.PageCollectionData(queryBuilder)
if err != nil {
	fmt.Println("Failed to page data:", err)
	return
}

// 打印分页结果
fmt.Printf("Total items: %d, Current page: %d\n", pageResult.Total, pageResult.PageIndex)
for _, item := range pageResult.Items {
	fmt.Printf("ID: %s, Score: %f\n", item.ID, item.Score)
}

5. 删除集合

以下代码展示了如何删除一个集合:

// 调用删除集合接口
delResp, err := client.DelCollection("example_collection")
if err != nil {
	fmt.Println("Failed to delete collection:", err)
	return
}
fmt.Println("Collection deleted successfully:", delResp)

6. 错误处理

以下代码展示了如何处理接口返回的错误:

resp, err := client.CreateCollection(createReq)
if err != nil {
	fmt.Println("Error:", err)
	return
}

if !resp.Success {
	fmt.Println("Failed:", resp.Message)
	return
}
fmt.Println("Success:", resp.Data)

7. 实战流程图

以下是一个流程图,展示了从初始化客户端到查询数据的完整流程:

mermaid

8. 数据结构

以下表格列出了 VectorRexClient 中常用的数据结构及其用途:

数据结构 用途
VectorField 定义集合中的向量字段
ScalarField 定义集合中的标量字段
QueryBuilder 构建查询条件
CollectionDataAddReq 添加数据的请求参数
VectorSearchResult 查询结果的返回格式
PageResult 分页查询结果的返回格式

总结

通过本文的介绍,您已经了解了VectoRex Go客户端的安装、初始化、功能模块、响应处理与异常管理以及实战示例。这些内容将帮助您快速集成和使用VectoRex服务,提升开发效率和应用的健壮性。

【免费下载链接】VectoRex VectoRex 是一个 纯 Java 实现 的高性能、可扩展的向量数据库,专为现代 AI 和大数据应用设计。它结合了高效的向量索引(HNSW)和强大的标量索引(倒排索引、范围索引),支持复杂的混合查询(向量 + 标量),适用于推荐系统、图像搜索、自然语言处理等场景。 【免费下载链接】VectoRex 项目地址: https://gitcode.com/javpower/VectoRex

Logo

惟楚有才,于斯为盛。欢迎来到长沙!!! 茶颜悦色、臭豆腐、CSDN和你一个都不能少~

更多推荐