匿名用户postgreSQL 全文索引有什么好的插件吗? 支撑中文的
postgreSQL 全文索引有什么好的插件吗? 支撑中文的
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
3条回答
默认
最新
2.1 PostgreSQL 默认 FTS
PostgreSQL 全文搜索是通过 FTS 配置库来支持的,大多数 PostgreSQL 发行版都自带了 10 个以上的 FTS 配置库,我们可以通过psql的\dF命令来查看已安装的配置库:可以看到 PostgreSQL 默认已经安装了大量的 FTS 搜索配置库,但是很不幸没有中文配置库。但好在,PostgreSQL 支持插件的形式来扩展 FTS,所以我们可以使用成熟的扩展库。
2.2 pg_jiebe FTS
jieba是国内一个颇为著名分词库,如果你是 Python 开发者,那么一定听过它的大名。有贡献者为 PostgreSQL 提供了 jieba 分词插件——pg_jieba,让我们可以在 PostgreSQL 使用到中文全文检索。
可以看到jieba提供了4种分类器,它们分别对应了不同的分词算法,如果你感兴趣,可以查阅相关的资料,这里我们不做过多的介绍,默认使用jiebacfg即可。
如果你想跟着我们一起,完成本节的实战内容,那么请先点开此链接安装 pg_jieba。
3.1 FTS 流程
全文搜索大致可分为两部分:
- 构建文本对应的索引(倒排索引)
- 通过搜索索引来找到对应的文本
3.2 文本向量化
在 FTS 中,原始文本在构建索引之前需要被向量化。原始文本(如:字符串)必须先被向量化后才能通过 FTS 对其检索,向量化后的内容需要存储到一个单独的向量字段中,该向量的数据类型是tsvector。
PostgreSQL 提供了to_tsvector函数来将原始文本向量化,
3.3 搜索关键字向量化
有了索引后,我们如何来搜索索引了?
一般情况下,我们是通过关键词来检索的,那么如何来组织关键词呢?
PostgreSQL 提供了to_tsquery函数来将词组织成tsquery向量,然后通过向量去搜索。
3.5 FTS 总结
我们总结一下 FTS 的使用:
- 原始文本,即字符串不能被直接搜索,我们通过 to_tsvector 函数将其向量化为词组,并保存到某个字段中,该字段数据类型为 tsvector。
- tsvector 的字段存储的是词与词序列的元组,需要新建 gin 索引才能使用搜索,下面会介绍。
- 搜索条件,狭义上可以理解成搜索关键字,也需要通过 to_tsquery 来向量化,且类型为 tsquery。
- 使用 tsquery 去搜索 tsvector,在下面的部分会介绍到。
评论
有用 0
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

