常用工具

在 Proxima BE 发布的镜像中,附带了几个常用工具,主要是方便客户管理 collection 和文档。

1. 如何获取

相关工具位于镜像 ghcr.io/proximabilin/proxima-be 的目录 /var/lib/proxima-be/bin/

2. admin_client

2.1 使用方法

$ admin_client  -h
Usage:
 admin_client <args>

Args:
 --command      Command type: create | drop
 --host         The host of proxima be, http port
 --collection   Specify collection name
 --schema       Specify collection schema format
 --help, -h     Display help info
 --version, -v  Dipslay version info

2.2 创建Collection

$ admin_client --command create --host 127.0.0.1:16001 --collection test_collection \
    --schema '{"collection_name":"test_collection", "index_column_params":[{"column_name":"test_column", 
    "index_type": "IT_PROXIMA_GRAPH_INDEX", "data_type":"DT_VECTOR_FP32", "dimension":8}]}'

2.3 删除Collection

$ admin_client --command drop --host 127.0.0.1:16001 --collection test_collection

3. bench_client

3.1 使用方法

$ bench_client -h
Usage:
 bench_client <args>

Args:
 --command        Command type: search|insert|delete|update
 --host           The host of proxima be
 --collection     Specify collection name
 --column         Specify column name
 --file           Read input data from file
 --protocol       Protocol http or grpc
 --concurrency    Send concurrency (default 10)
 --topk           Topk results (default 10)
 --perf           Output perf result (default false)
 --help, -h       Display help info
 --version, -v    Display version info

3.2 插入数据

$ bench_client --command insert --host 127.0.0.1:16000 --collection test_collection --column test_column --file 
data.txt

数据格式支持明文和二进制两种,key与向量之间用";“分隔,多维向量采用空间分割,样例数据如下:

0;-0.009256 -0.079674 -0.070349 0.007072 -0.064061 -0.010632 0.083429 -0.074821
1;-0.061519 -0.001263 -0.016528 0.031539 0.041385 -0.017736 -0.005704 0.129443
2;-0.039616 -0.063191 0.057591 -0.090278 -0.007452 -0.035939 -0.021892 -0.037860
3;0.042097 0.050037 0.055060 0.150511 -0.052841 -0.005502 -0.018618 0.054607

3.3 查询数据

query数据格式同上述的插入数据格式相同。

$ bench_client --command search --host 127.0.0.1:16000 --collection test_collection --column test_column --file 
query.txt

3.4 删除数据

data数据格式同上述的插入数据格式相同。

$ bench_client --command delete --host 127.0.0.1:16000 --collection test_collection --column test_column --file 
data.txt

4. index_builder

对于数据集已经提前准备好的场景,为加速索引构建,可通过离线构建工具加速构建。

4.1 使用方法

Usage:
 index_builder <args>

Args:
 --schema           Specify the schema of collection
 --file             Specify input data file
 --output           Sepecify output index directory(default ./)
 --concurrency      Sepecify threads count for building index(default 10)
 --help, -h         Dipslay help info
 --version, -v      Dipslay version info

4.2 数据文件格式说明

每行一条记录,由 ‘;’ 分隔。分别是 key,向量,正排属性。其中 key 为 uint64 类型,向量各维度用 ' ' 分隔。属性可选。例如

111;1.0 1.1 1.2 1.3;a,b

4.3 使用示例

test.txt 内容为上述内容的文件。则构建索引可用如下命令:

index_builder --output index --schema '{"collection_name":"test_collection", "forward_column_names":["k1"], "index_column_params":[{"column_name":"test_column",
"index_type": "IT_PROXIMA_GRAPH_INDEX", "data_type":"DT_VECTOR_FP32", "dimension":4}]}' --file test.txt

4.3 使用注意

由于离线工具构建的索引没有相应 meta 信息。如果作为 Proxima SE 提供检索能力。需要创建一个对应的 collection。 例如启动 proxima_se 服务时,配置好相应的索引位置为 index:

common_config {
  grpc_listen_port: 16000
  http_listen_port: 16001
}
index_config {
    index_directory: "index/"
}
query_config {
  query_thread_count: 8
}

启动后,使用如下命令创建相应集合。

curl -X POST http://0.0.0.0:16001/v1/collection/test_collection -d '{"collection_name":"test_collection", "forward_column_names":["k1"], "index_column_params":[{"column_name":"test_column","index_type": "IT_PROXIMA_GRAPH_INDEX", "data_type":"DT_VECTOR_FP32", "dimension":4}]}'

然后进行检索

curl -X POST \
  http://0.0.0.0:16001/v1/collection/test_collection/query \
 -d '{
    "knn_param":{
        "column_name":"test_column",
        "topk":10,
        "matrix":"[[1.0, 2.0, 3.0, 4.0]]",
        "batch_count":1,
        "dimension":4,
        "data_type":"DT_VECTOR_FP32",
        "is_linear":true,
    }
}'

# 返回
{"status":{"code":0,"reason":"Success"},"results":[{"documents":[{"score":11.34,"primary_key":"111","forward_column_values":[{"key":"k1","value":{"string_value":"a,b"}}]}]}],"debug_info":"","latency_us":"902"}