Hologres V4.0版本升级了向量检索能力,支持HGraph向量检索算法,实现高性能、高精度、低延时的向量检索能力。详情参见HGraph索引使用指南(推荐)。本文为您介绍如何使用Hologres的Python SDK(Hologres Vector)进行向量计算。
前提条件
已创建AccessKey,详情请参见创建AccessKey。
已安装Python环境,且Python版本>=3.8。
授予账号相应权限,详情请参见授予RAM用户权限。
安装SDK
您可以通过pip安装Python SDK,更多说明请参见holo-search-sdk。
pip install holo-search-sdk使用步骤
连接Hologres
import holo_search_sdk as holo
# 连接到数据库
client = holo.connect(
host="<HOLO_HOST>",
port=<HOLO_PORT>,
database="<HOLO_DBNAME>",
access_key_id="<ACCESS_KEY_ID>",
access_key_secret="<ACCESS_KEY_SECRET>",
schema="public" #可根据实际schema修改
)
# 建立连接
client.connect()
变量说明:
变量 | 描述 |
HOLO_HOST | Hologres实例的网络地址。 进入Hologres管理控制台的实时数仓Hologres获取实例的网络地址。 |
HOLO_PORT | Hologres的实例端口。 进入Hologres管理控制台的实时数仓Hologres获取实例端口。 |
HOLO_DBNAME | Hologres创建的数据库名称。 |
ACCESS_KEY_ID | 当前阿里云账号的AccessKey ID。 您可以点击AccessKey 管理,获取AccessKey ID。 |
ACCESS_KEY_SECRET | 当前阿里云账号的AccessKey Secret。 |
创建向量表
需要通过DDL创建,下面是创建的示例:
create_table_sql = """
CREATE TABLE IF NOT EXISTS <TABLE_NAME> (
id BIGINT PRIMARY KEY,
content TEXT,
vector_column FLOAT4[] CHECK (array_ndims(vector_column) = 1 AND array_length(vector_column, 1) = 3)
);
"""
_ = client.execute(create_table_sql, fetch_result=False)说明
<TABLE_NAME>需要替换成实际表名。
打开向量表
columns = {
"id": ("INTEGER", "PRIMARY KEY"),
"content": "TEXT",
"vector_column": "FLOAT4[]"
}
table = client.open_table("<TABLE_NAME>")导入向量数据
data = [
[1, "Hello world", [0.1, 0.2, 0.3]],
[2, "Python SDK", [0.4, 0.5, 0.6]],
[3, "Vector search", [0.7, 0.8, 0.9]]
]
table.insert_multi(data, ["id", "content", "vector_column"])设置向量索引
table.set_vector_index(
column="vector_column",
distance_method="Cosine",
base_quantization_type="rabitq",
max_degree=64,
ef_construction=400
)查询向量数据
基础向量检索
# 向量搜索 query_vector = [0.2, 0.3, 0.4] # 限制结果数量 results = table.search_vector( vector=query_vector, column="vector_column", distance_method="Cosine" ).limit(10).fetchall() # 设置最小距离 results = table.search_vector( vector=query_vector, column="vector_column", distance_method="Cosine" ).min_distance(0.5).fetchall() # 带输出别名的搜索 results = table.search_vector( vector=query_vector, column="vector_column", output_name="similarity_score", distance_method="Cosine" ).fetchall()基于主键的精确查询
# 根据主键查询单条记录 result = table.get_by_key( key_column="id", key_value=1, return_columns=["id", "content", "vector_column"] # 可选,不指定则返回所有列 ).fetchone() # 根据主键列表批量查询 results = table.get_multi_by_keys( key_column="id", key_values=[1, 2, 3], return_columns=["id", "content"] # 可选,不指定则返回所有列 ).fetchall()
关闭连接
# 关闭连接
client.disconnect()常见问题
Q:导入holo_search_sdk报错如下:
import holo_search_sdk as holo racevack (most recent call last): File "<stdin›" , line 1, in ‹module› File "/usr/local/lib/python3.8/site-packages/holo_search_sdk/__init__.py", line 9, in ‹module> from .client import Client, connect File "/usr/local/lib/python3.8/site-packages/holo_search_sdk/client.py", line 9, in <module> from psycopg. abc import Query File "/usr/local/lib/python3.8/site-packages/psycopg/__init__.py", line 9, in <module> from. import pa # noqa: F401 import early to stabilize side effects File "/usr/local/lib/python3.8/site-packages/psycopg/pq/__init__.py", line 116, in ‹module› import_from_libpqO) File"/usr/local/lib/python3.8/site-packages/psycopg/pq/__init__.py",line 108, in import_from_libpa raise ImportError( ImportError: no pa wrapper available. Attempts made: - couldn't import psycopg 'c' implementation: No module named 'psycopg_c' - couldn't import psycopg 'binary' implementation: No module named 'psycopg_binary' - couldn't import psycopg 'python' implementation: libpa library not foundA:Python运行环境需要安装pscopg-binary,执行如下命令:
pip install psycopg-binary
该文章对您有帮助吗?