🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 概述 pgsql 配置中文分词比较复杂,可以使用程序中进行分词,在pgsql中进行查找的方式,毕竟程序分词比较灵活 ## 主要函数 * to_tsvector() * 分词用,  将文本转为向量。 用它可以将字符串转成上边说的 tsvector ,  遗憾的是默认不支持中文分词 * to_tsquery() * 构建搜索的关键字, 支持各种符号表示条件。 详情查看文档 * setweight() * 设置关键词权重, 总共四个权重从高到低为 A-B-C-D * ts_rank () * 排序用, 可以根据 to\_tsquery 和 tsvector 的匹配度计算 ## 分词入门 ```sql CREATE TABLE example_table ( id SERIAL PRIMARY KEY, text_column TEXT NOT NULL, search_vector TSVECTOR ); -- 插入一些示例数据 INSERT INTO example_table (text_column) VALUES ('The quick brown fox jumps over the lazy dog.'), ('A stitch in time saves nine.'), ('Actions speak louder than words.'); -- 将文本分词并存储到 search_vector 列中 UPDATE example_table SET search_vector = to_tsvector('english', text_column); -- 在搜索向量上执行查询 SELECT * FROM example_table WHERE search_vector @@ to_tsquery('english', 'fox'); -- 如果实际表中没有 search_vector 字段也可直接根据 TEXT 或 VERCHAR 字段进行全文索引 -- 当然性能没有上面的上面好,此方法不推荐 SELECT * FROM example_table WHERE to_tsvector('english',text_column) @@ plainto_tsquery('english', 'time stitch'); ``` > `@@ ` 字符就是用来进行全文缩影查询 ## 中文分词 插入中文sql 在 exmaple-table 插入sql ``` INSERT INTO example_table (text_column) VALUES ('其中的Bamboo安装和使用都比较复杂,所以我选择的是zhparser'), ('scws是简易中文分词系统的缩写,它的原理其实很简单'), ('基于词典,将文本中的内容按照词典进行分词,提取关键字等。github上的地址在这里。它是xunsearch的核心分词系统'); ``` 使用程序对中文进行分词 ### 乳如php 示例 先创建数据库 ``` CREATE TABLE example_table ( id SERIAL PRIMARY KEY, title TEXT NOT NULL, text_column TEXT NOT NULL, search_vector tsvector, ); CREATE INDEX search_vector ON example_table USING GIST (search_vector); ``` 跳转进行查看[php 原生中文分词](%E5%85%A8%E6%96%87%E7%B4%A2%E5%BC%95/php%E5%8E%9F%E7%94%9F%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D.md) 此php 给出的示例时在插入时,同时对分词也进行插入,但是如果实际开发中插入频繁,可定时对为分词的数据进行分词后更新