目录

pgsql-17 全文搜索

17 - 全文搜索

1. 📖 概述

PostgreSQL内置强大的全文搜索功能,支持中英文搜索、相关性排名等。

2. 🔍 基础概念

2.1 tsvector和tsquery

-- 创建全文搜索列
ALTER TABLE articles ADD COLUMN search_vector tsvector;

-- 更新搜索向量
UPDATE articles SET search_vector =
    to_tsvector('english', title || ' ' || content);

-- 创建GIN索引
CREATE INDEX idx_articles_search ON articles USING GIN(search_vector);

-- 搜索
SELECT * FROM articles
WHERE search_vector @@ to_tsquery('english', 'postgresql & database');

-- 相关性排序
SELECT title, ts_rank(search_vector, query) AS rank
FROM articles, to_tsquery('english', 'postgresql') query
WHERE search_vector @@ query
ORDER BY rank DESC;

3. 🌏 中文全文搜索

-- 安装zhparser分词器
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);

-- 使用中文搜索
SELECT * FROM articles
WHERE to_tsvector('chinese', title) @@ to_tsquery('chinese', '数据库');

4. 📚 下一步

学习数组与范围类型