云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能

简介: 本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。

参考文档:https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/user-guide/fusion-search-use-guide?spm=a2c4g.11186623.help-menu-92664.d_2_8_3.4bf95fa2s3zEtw&scm=20140722.H_2528590._.OR_help-T_cn~zh-V_1


# 建表SQL,并修改向量列的存储格式为PLAN
CREATE TABLE IF NOT EXISTS public.articles (
    id INTEGER NOT NULL,
    sentence TEXT,
    vector REAL[],
    PRIMARY KEY(id)
) DISTRIBUTED BY(id);

ALTER TABLE public.articles ALTER COLUMN vector SET STORAGE PLAIN;

\d+ articles


# 创建向量索引
CREATE INDEX ON public.articles USING ann (vector) WITH (dim = '384', hnsw_m = '100', pq_enable='0');

# 为了实现混合检索,为原表增加2列
ALTER TABLE public.articles add column username varchar(512);
ALTER TABLE public.articles add column time timestamp without time zone;


改文件字符集
iconv -f GBK -t UTF-8 /usr/local/postgresql-11.5/sentences_vectors1.csv -o sentences_vectors.csv


# 将sentences_vectors.csv中处理好的数据导入到表中
PGPASSWORD='Alibaba%1688' ./psql -U dbuser -p 5432 -h gp-xxx.com -d poc -c "COPY public.articles (id, sentence, vector,username,time) FROM STDIN WITH (FORMAT CSV, HEADER true, DELIMITER ',');" < /usr/local/postgresql-11.5/sentences_vectors.csv

# 对混合查询关联的结构化与板结构化列建立索引
-- 对结构化字段建立BTREE索引
CREATE INDEX ON articles(time);

- 添加tsvector 列,为了支持全文检索,通常需要添加一个 tsvector 列,用于存储文本的向量化表示
ALTER TABLE articles ADD COLUMN tsv_content TSVECTOR;

- 更新 tsvector 列,使用 to_tsvector 函数将文本字段转换为 tsvector 格式,并更新到新列中
UPDATE articles SET tsv_content = to_tsvector(sentence);

- 在 tsvector 列上创建 GIN 索引以加速全文检索
CREATE INDEX idx_articles_tsv_content ON articles USING GIN (tsv_content);

- 查询全文索引
SELECT * FROM articles WHERE tsv_content @@ to_tsquery('make');

# 查询语句
SELECT 
    id,
    sentence, 
    cosine_similarity(vector, array(SELECT generate_series(1, 384))::real[]) AS score
FROM 
    articles
WHERE 
    time >= '2023-07-18 00:00:00' 
    AND time <= '2023-08-18 00:00:00' AND tsv_content @@ to_tsquery('best')
ORDER BY 
    vector <=> array(SELECT generate_series(1, 384))::real[]
LIMIT 10;

#创建表+向量索引

image.png

# 为了实现混合检索,为原表增加2列

image.png

#对结构化字段建立BTREE索引

image.png

#在 tsvector 列上创建 GIN 索引以加速全文检索

image.png

查询结果

image.png

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
11月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
540 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
1068 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
788 9
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
469 6
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
1580 3
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
1553 1

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 云原生数据仓库 AnalyticDB PostgreSQL版
  • 推荐镜像

    更多