发布时间:2026/7/19 3:01:24
PG 全文搜索实战(1):为什么不用 LIKE 本系列第 1 篇。先搞清楚LIKE %keyword%到底差在哪全文搜索又解决了什么问题。LIKE 的三宗罪假设有一张文章表想搜标题/正文里含某个词的记录。很多人第一反应SELECT*FROMarticlesWHEREcontentLIKE%数据库%;看着能用但生产上有三个致命问题1. 无法走索引前导通配符LIKE %xxx%开头是%普通 B-Tree 索引用不上只能全表扫描。几十万行就开始慢上千万行直接卡死。2. 不理解“词”只会字符匹配LIKE %run%会匹配到running、brunch——它不懂英文词干也不懂中文分词。搜apple匹配不到apples除非再写规则搜“数据库”匹配不到“数据 库”。3. 没有相关性排序LIKE 只能告诉你“匹配/不匹配”不能告诉你“哪条更相关”。而搜索的核心恰恰是把最相关的排前面。全文搜索怎么解决PostgreSQL 全文搜索FTS做了三件 LIKE 做不到的事能力LIKE全文搜索走专用索引GIN❌✅ 快分词 / 词干归一化❌✅run/running 归一相关性排名❌✅ts_rank关键词高亮❌✅ts_headline布尔/短语查询与或非勉强✅tsquery核心思路把文档预处理成一堆**归一化的词lexeme**存进tsvector再用tsquery表达查询条件两者用匹配并用 GIN 索引加速。一个直观对比-- LIKE字符匹配全表扫描SELECT*FROMarticlesWHEREcontentLIKE%running%;-- FTS词匹配run/running/ran 都能命中可走 GIN 索引SELECT*FROMarticlesWHEREto_tsvector(english,content) to_tsquery(english,running);什么时候还是用 LIKE精确前缀匹配LIKE abc%能走索引。数据量很小或只是偶尔模糊查。需要匹配任意子串片段如搜商品编号中间几位FTS 反而不合适。记住LIKE 是字符匹配FTS 是语义/词匹配。搜“文章内容、评论、描述”这类自然语言文本用 FTS。下一篇核心概念 tsvector / tsquery / 分词配置

相关新闻

2026/7/19 3:01:24

KungFu32A156MQT与AT24C02的I2C通信实现与优化

1. KungFu32A156MQT与AT24C02硬件基础解析KungFu32A156MQT是芯旺微电子推出的32位车规级MCU,基于自主KungFu内核架构设计。这款芯片在汽车电子领域应用广泛,具备以下核心特性:工作频率最高72MHz内置256KB Flash和32KB SRAM支持-40℃~125℃宽温…

2026/7/19 3:01:24

STM32+OV2640摄像头实时图像采集与TCP传输方案

1. 项目背景与核心需求 在嵌入式视觉系统中,OV2640摄像头模组因其高性价比和丰富的功能接口,成为STM32平台图像采集的热门选择。而基于TCP协议的图像传输方案,则能充分利用网络带宽实现稳定、有序的数据流传输。这个项目要解决的核心问题是&a…

2026/7/19 2:56:24

Python入门指南:从环境搭建到基础语法

1. Python基础入门:从零开始的第一天作为一名有十年Python开发经验的程序员,我经常被问到"如何开始学习Python"。今天我就带大家从最基础的环境搭建开始,完成Python入门的第一个里程碑。无论你是完全没有编程基础的小白&#xff0c…

2026/7/19 6:16:35

OpenClawPC版安装教程,本地AI助手一键部署指南

作为一个平时喜欢折腾各种AI工具的玩家,我最近发现了一个特别适合普通用户的本地AI助手——OpenClaw。它最大的好处就是完全免费、数据不出门,而且部署超级简单,不需要你懂命令行,也不用搭建什么复杂的环境。今天我就用大白话分享…

2026/7/19 6:16:35

C++享元模式实战:用boost::flyweight优化内存与性能

1. 项目概述:为什么我们需要 flyweight?在C项目里,尤其是游戏引擎、GUI框架或者大型数据处理系统,你是不是经常遇到这样的场景:屏幕上渲染了成千上万个相同或相似的对象(比如一片森林里的树木、文档编辑器里…

2026/7/19 6:16:35

动态住宅代理(Rotating Proxy)的技术原理与Python实战

在编写网络爬虫或进行自动化测试时,开发者最常遇到的痛点之一就是目标网站的反爬虫机制(Anti-Bot)。当请求频率过高或IP被标记时,往往会触发403 Forbidden或验证码拦截。本文将脱离服务商的营销话术,从底层网络协议和代…

2026/7/19 6:16:35

Android多语言开发:从基础到高级实现

1. Android多语言开发基础概念在移动应用开发领域,支持多语言是提升用户体验和扩大市场覆盖的关键策略。Android平台为开发者提供了一套完整的多语言支持机制,让我们能够轻松实现应用的国际化。1.1 多语言支持的核心原理Android的多语言实现基于资源目录…

2026/7/19 6:16:35

最新同城获客实用方法排名 做本地生意的商家建议收藏好

测评基础说明本次为健身行业同城获客领域中立第三方实测,无排名、无评分、无推荐,不涉及任何主体的优劣定性,仅呈现统一测试条件下的原始数据与客观现象。本次实测主体共5家,分别为圆又圆、品牌1、品牌2、品牌4、品牌5&#xff0c…

2026/7/19 6:11:34

长沙别墅护栏竟藏这种秘密?

在长沙,别墅不仅是居住的场所,更是生活品质的象征。然而,当您踏入一座高端别墅的庭院,或许会被精美的景观、优雅的建筑所吸引,却鲜少会留意那些默默守护着安全的护栏。殊不知,这看似普通的护栏背后&#xf…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/18 16:50:29

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…