当前位置: 首页 > news >正文

南大通用GBase 8c典型模糊匹配全文检索场景讲解

在普通 B-tree 索引完全失效的情况下,如LIKE '%xxx%'、LIKE '%xxx'、LIKE 'xxx%'、IN ('xxx%','%xxx','%xxx%') 等,可以尝试考虑 GIN + pg_trgm 和 GIN + zhparser 两种索引方式。

实验脚本,包含:

  • 一张测试表,数据包含 中文、英文、中英混合。
  • 场景分类(前缀匹配、后缀匹配、任意位置模糊、中文分词搜索)。
  • 推荐使用的索引类型(pg_trgm 或 zhparser)。
  • 每个场景都附带测试 SQL。

测试环境准备

-- schema 设置 SET search_path TO tsearch; -- 测试表 DROP TABLE IF EXISTS opt_jnt_box; CREATE TABLE opt_jnt_box ( TYPEID SERIAL PRIMARY KEY, jnt_box_id BIGINT NOT NULL, jnt_box_no VARCHAR(50), jnt_box_name TEXT , delete_state SMALLINT DEFAULT 0 ); -- 插入混合数据(中文、英文、中英混合) INSERT INTO opt_jnt_box (jnt_box_id, jnt_box_no, jnt_box_name, delete_state) VALUES (1, 'BOX0001', '万惠科技园一期A栋', 0), (2, 'BOX0002', '人工智能大厦B栋', 0), (3, 'BOX0003', 'Blockchain Innovation Center', 0), (4, 'BOX0004', '未来科技城·AI Tower', 0), (5, 'BOX0005', 'Cloud数字中心', 0), (6, 'BOX0006', '深圳市南山区科技南路C栋', 0), (7, 'BOX0007', 'AI人工智能实验室', 0), (8, 'BOX0008', 'International Data Hub', 0), (9, 'BOX0009', '广州市天河区金融大厦', 0), (10,'BOX0010', 'Smart City 智慧城市示范区', 0);

索引准备

-- 1. trigram 模糊索引 CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE INDEX idx_trgm_jnt_box_name ON opt_jnt_box USING gin (jnt_box_name gin_trgm_ops); -- 2. 中文分词索引(zhparser) CREATE EXTENSION IF NOT EXISTS zhparser; CREATE TEXT SEARCH CONFIGURATION zhcfg (PARSER = zhparser.zhparser); ALTER TEXT SEARCH CONFIGURATION zhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; CREATE INDEX idx_zhparser_jnt_box_name ON opt_jnt_box USING gin(to_tsvector('zhcfg', jnt_box_name));

使用场景对比

  • 1、前缀匹配(LIKE 'xxx%')

特征:用户知道开头一部分,例如输入“万惠”要查“万惠科技园”。

普通索引:B-tree 可以支持 LIKE 'xxx%',但中文字段里经常失效(特别是带 COLLATE 时)。

推荐索引:pg_trgm 更稳健。

测试 SQL:

EXPLAIN ANALYZE SELECT * FROM opt_jnt_box WHERE jnt_box_name LIKE '万惠%';
  • 2、后缀匹配(LIKE '%xxx')

特征:用户知道结尾,例如搜索“中心”。

普通索引:完全失效。

推荐索引:pg_trgm。

测试 SQL:

EXPLAIN ANALYZE SELECT * FROM opt_jnt_box WHERE jnt_box_name LIKE '%中心';
  • 3、任意位置模糊(LIKE '%xxx%')

特征:用户只知道部分关键词(中文或英文)。

普通索引:失效。

推荐索引:pg_trgm。

测试 SQL:

-- 中文模糊 EXPLAIN ANALYZE SELECT * FROM opt_jnt_box WHERE jnt_box_name LIKE '%人工智能%'; -- 英文模糊 EXPLAIN ANALYZE SELECT * FROM opt_jnt_box WHERE jnt_box_name LIKE '%Data%';
  • 4、多关键词匹配(分词搜索)

特征:用户输入多个词,要求都出现(比如“人工智能 & 大厦”)。

普通索引:LIKE 难以表达。

推荐索引:zhparser(中文分词)。

测试 SQL:

-- 查包含 “人工智能” 且包含“大厦”的 EXPLAIN ANALYZE SELECT * FROM opt_jnt_box WHERE to_tsvector('zhcfg', jnt_box_name) @@ to_tsquery('zhcfg', '人工智能 & 大厦');
  • 5、OR 查询(多个关键词,任意出现)

特征:用户可能输入多个候选词(如“AI” 或 “人工智能”)。

推荐索引:
o中文:zhparser。
o英文:pg_trgm 也能胜任。

测试 SQL:

-- 中文 OR 搜索 SELECT * FROM opt_jnt_box WHERE to_tsvector('zhcfg', jnt_box_name) @@ to_tsquery('zhcfg', '人工智能 | 智慧城市'); -- 英文 OR 搜索 SELECT * FROM opt_jnt_box WHERE jnt_box_name LIKE '%AI%' OR jnt_box_name LIKE '%Data%';
  • 6、中英混合搜索

特征:字段中同时有中英文,用户可能输入混合词。

推荐索引:

中文关键词:用 zhparser。

英文关键词:用 pg_trgm。

混合场景:可以两个索引一起建,根据查询条件走不同索引。

测试 SQL:

-- 中文分词 + 英文单词(AI Tower) SELECT * FROM opt_jnt_box WHERE to_tsvector('zhcfg', jnt_box_name) @@ to_tsquery('zhcfg', '科技城') OR jnt_box_name LIKE '%AI%';
  • 7、IN 场景(多个模糊条件)

特征:用户批量匹配,例如 IN ('%AI%','%大厦%','%中心%')。

普通索引:失效。

推荐索引:
o中文:zhparser。
o英文/混合:pg_trgm。

测试 SQL:

-- trigram 支持多模糊条件 SELECT * FROM opt_jnt_box WHERE jnt_box_name LIKE '%AI%' OR jnt_box_name LIKE '%大厦%' OR jnt_box_name LIKE '%中心%';

✅ 总结对比

场景

查询模式

推荐索引

示例

前缀匹配

LIKE 'xxx%'

pg_trgm

LIKE '万惠%'

后缀匹配

LIKE '%xxx'

pg_trgm

LIKE '%中心'

任意模糊

LIKE '%xxx%'

pg_trgm

LIKE '%人工智能%'

多关键词 AND

中文检索

zhparser

人工智能 & 大厦

多关键词 OR

中文/英文混合

zhparser / pg_trgm

<code>人工智能

中英混合

中文词+英文词

zhparser + pg_trgm

</code>科技城 OR %AI%<code>

多模糊 IN

IN('%xx%','%yy%')

pg_trgm / zhparser

</code>%AI% OR %大厦%`

http://www.jsqmd.com/news/1334120/

相关文章:

  • Unity网络聊天室开发实战:基于Mirror框架的核心概念与实现
  • 深入理解LongCat-Flash-Lite-Sparse的MoE架构:256专家协同工作的原理与优势分析
  • 2026最新文昌本地漏水检测公司精选推荐:正规防水补漏优选靠谱口碑师傅上门维修 - 吉林同城获客
  • 网站建设的基本流程是什么:从0到1的全链路深度解析
  • 如何3步构建终极离线音乐歌词库:LRCGET完整技术解析与实践指南
  • 沈阳顺意金属护栏有限公司|专业的锌钢护栏、PVC 护栏、水泥护栏源头厂家! - 自由和远方
  • 现在不做AI咨询,半年后将失去议价权:技术顾问转型窗口期倒计时(含能力迁移路径图)
  • Java面向对象编程:Point类的封装与设计模式实践
  • 微信里怎么做一场有**的投票活动?2026天天评选投票小程序全方位测评解析 - 投票制作小程序
  • PPTist:3大技术架构革新重塑Web端演示文稿创作体验
  • Unity游戏去马赛克技术全解析:从资源解密到运行时补丁
  • GitHub中文翻译插件:3分钟让GitHub界面变中文
  • LIVP转JPG全攻略:解决跨平台兼容性问题
  • Unity集成ROS机器人仿真:URDF导入与MoveIt通信实战
  • Clawdbot智能桌面自动化实战:国产大模型驱动,自然语言操控电脑
  • 2026最新榆林本地漏水检测公司精选推荐:正规防水补漏靠谱服务商,本地口碑优选 - 吉林同城获客
  • 线性最小二乘:从数学原理到Python实战的完整指南
  • 【AI编码体验避坑指南】:92%的团队忽略的3类幻觉风险,附可落地的Prompt审计清单与验收SOP
  • Python Pygame游戏开发实战:从零复刻天天酷跑核心玩法
  • 【AI写解决方案实战指南】:20年架构师亲授5大避坑法则与3类高转化模板
  • 如果你有电脑,这个暑假一定要死磕这三个技能!零基础学黑客技术挖漏洞看这一篇就够了!
  • 南大通用GBase 8a之通过量化分析节点层数据集中度评估数据在DC包中的分布情况
  • 2026 年若羌黄玉黑山料青山料,和田玉达人拿货避坑实测 - LYL仔仔
  • 太阳能电荷泵电源设计:从原理到实践,解决物联网设备微能量收集难题
  • Unity风格化云朵Shader实现:从噪声叠加到动态天气系统
  • 基于Proteus仿真的STM32嵌入式系统开发:从虚拟调试到硬件实现
  • 优选靠谱的不锈钢门门面压花加工永康门面压花厂家解析 - 企师傅推荐官
  • AI写付费问答全流程拆解(从提示词设计到平台过审率提升300%)
  • 为什么你的AI专栏卖不动?2024最新平台算法变动下,必须立刻调整的3个核心指标
  • 16675台感知设备动态阈值分析,应急预警从5小时到2分钟