01
采用 Vamana 算法:Vamana 图索引相比于传统图算法(如 HNSW、NSG),Vamana 通过动态调整参数 α(α≥1)优化图的构建,使其在保持高召回率的同时减少搜索路径长度。可以处理大规模数据,同时保持高召回率、低查询延迟和低内存占用。
采用 PQ 量化算法:通过 PQ 量化编码压缩向量大小,用于快速筛选候选集。 使用示例:
--创建diskann索引
CREATE INDEX ON items USING diskann (embedding vector_l2_ops) WITH (index_size = 100, enable_pq = on, pq_m = 8);
--使用diskann索引进行向量查询
SET diskann_probes = 64;
SELECT * FROM items ORDER BY embedding <-> '[1,2,3,4]';
02
from psycopg2.extras import execute_multi_search, init_conn_pool, close_conn_pool
sql_template = "SELECT * FROM test_table1 ORDER BY embedding <-> %s LIMIT %s;"
scan_params = {"enable_seqscan": "off", "hnsw_ef_search" : 40}
dbconfig = {'user': 'yourusername', 'password': 'xxxxxx', 'host': 'yourhost', 'dbname': 'yourdbname', 'port' : 5432}
argslist = [('[1,1,1]', 1), ('[2,2,3]', 2)]
conn_pool_mgr = init_conn_pool(dbconfig, 2, scan_params)
res = execute_multi_search(dbconfig, conn_pool_mgr, sql_template, argslist, scan_params, 2)
close_conn_pool(conn_pool_mgr)
03
-- 创建普通表,包含id、document列,document存储文本数据
openGauss=# CREATE TABLE bm25_table
(
id INT,
document TEXT
);
CREATE TABLE
-- 插入文档数据
INSERT INTO bm25_table VALUES(1, '香蕉是热带水果');
INSERT INTO bm25_table VALUES(2, '小明喜欢吃香蕉');
-- 为document列建立bm25索引
openGauss=# CREATE INDEX bm25_index on bm25_table using bm25(document);
ALTER TABLE
-- 执行查询语句,检索'香蕉'相关的文档,并显示文档分数
openGauss=# SELECT *+ indexscan (bm25_table bm25_index)*/ *, document <&> '香蕉' AS score FROM bm25_table ORDER BY document <&> '香蕉' DESC;
id | document | score
1 | 小明喜欢吃香蕉 | .182321563363075
2 | 香蕉是热带水果 | .182321563363075
(2 rows)
-- 使用bm25索引检索'小明喜欢吃什么'
openGauss=# SELECT *+ indexscan (bm25_table bm25_index)*/ *, document <&> '小明喜欢吃什么' AS score FROM bm25_table ORDER BY document <&> '小明喜欢吃什么' DESC;
id | document | score
1 | 小明喜欢吃香蕉 | 1.3862943649292
(1 rows)
文章转载自openGauss数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




