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

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

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

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

暂无图片 评论
暂无图片 有用 0
打赏 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
打赏 0
P
pgdba
暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
postgresql 报错:could not close temporary statistics file "pg_stat_tmp/db_0.tmp": No space left on device
回答 1
临时文件使用量过大,可以使用tempfilelimit限制临时文件的大小。
postgresql 能不能通过某种方式,忽略其中的条件值?
回答 1
举个例子
keepalive启动失败
回答 1
可能是配置错误或者找不到配置文件,排查步骤:检查配置文件是否存在?ls/etc/keepalived/keepalived.conf手动调试启动/usr/local/keepalived/sbin/k
postgresql 有什么函数可以获取本机 ip 地址吗?
回答 1
已采纳
PostgreSQL本身并不带类似的转换函数,只能自己通过splitpart之类的方法进行分割转换。写函数:CREATEFUNCTIONip2int(text)RETURNSbigintAS$$SEL
请教个问题,下面两张图怎么找对应关系呢?
回答 6
关键是我在做测试,我故意把控制文件中的数据文件注释掉重建了控制文件模拟数据文件missing,需要找到missing的数据文件与真实数据文件对应关系rename回去
postgresql 从库报错:catalog is missing 1 attribute(s) for relid 1120805096
回答 1
最近刚碰到个类似的问题,是元数据错误导致的。selectfrompgattributewhereattrelid 1120805096;和主库上比较下是否正常,有问题的话把数据修改下
pg_rman-1.3.9-1.pg12.rhel7.x86_64 求一个
回答 1
上传附件:pgrman1.3.91.pg12.rhel7.x8664.rpm
postgresql 里面可以使用insert overwrite吗?
回答 2
类似upsert语法:insertintoonconflictdoupdate/donothing
怎么能让postgresql 使用多个CPU?
回答 1
多来几个这个的SQL,多开几个这样的窗口。你就会发现都用起来了。
PostgreSQL数据库的文件存储在哪里?
回答 1
已采纳
initdb的时候会指定一个PGDATA目录,这就是PostgresQL存储数据的地方。典型的位置是在/postgres/dataa。PGDATA下面各项存储的内容大概是:文件或目录名存储内容PGVE
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~