暂无图片
postgreSQL 全文索引有什么好的插件吗? 支撑中文的
我来答
分享
暂无图片 匿名用户
postgreSQL 全文索引有什么好的插件吗? 支撑中文的

postgreSQL 全文索引有什么好的插件吗? 支撑中文的

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
hotice

Full Text Search,全文检索。 jieba 分词插件——pg_jieba

暂无图片 评论
暂无图片 有用 0
hotice

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 流程

全文搜索大致可分为两部分:

  1. 构建文本对应的索引(倒排索引)
  2. 通过搜索索引来找到对应的文本

3.2 文本向量化

在 FTS 中,原始文本在构建索引之前需要被向量化。原始文本(如:字符串)必须先被向量化后才能通过 FTS 对其检索,向量化后的内容需要存储到一个单独的向量字段中,该向量的数据类型是tsvector

PostgreSQL 提供了to_tsvector函数来将原始文本向量化,

3.3 搜索关键字向量化

有了索引后,我们如何来搜索索引了?

一般情况下,我们是通过关键词来检索的,那么如何来组织关键词呢?

PostgreSQL 提供了to_tsquery函数来将词组织成tsquery向量,然后通过向量去搜索。

3.5 FTS 总结

我们总结一下 FTS 的使用:

  1. 原始文本,即字符串不能被直接搜索,我们通过 to_tsvector 函数将其向量化为词组,并保存到某个字段中,该字段数据类型为 tsvector。
  2. tsvector 的字段存储的是词与词序列的元组,需要新建 gin 索引才能使用搜索,下面会介绍。
  3. 搜索条件,狭义上可以理解成搜索关键字,也需要通过 to_tsquery 来向量化,且类型为 tsquery。
  4. 使用 tsquery 去搜索 tsvector,在下面的部分会介绍到。
暂无图片 评论
暂无图片 有用 0
P
pgdba
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏