postgresql+zhparser 模糊搜索出现 NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignored

2020-09-14 17:47:21 +08:00
 Kcelone

在做项目过程中,使用了 postgresql 数据库,因为数据存储的都是 jsonb 格式的数据块,需要支持模糊搜索,本来使用的 bamboo,但对 postgresql 版本支持不够友好,后来使用了 zhparser, 具体安装部署,去 git 上找吧,不说了,给个链接 https://github.com/amutu/zhparser 具体用法看 readme 。 在使用过程中遇到一个问题:text-search query contains only stop words or doesn't contain lexemes, ignored, 中文就是:注意: 文本搜索查询只包含结束词或者不包含词汇单位, 被忽略 。(不信就谷翻一下, 没差的 0_o )

查了些资料,看了一些国内外大神写的博客,推荐一篇: http://www.postgres.cn/v2/news/viewone/1/215

确保下面几个方面:

1. zhparser 解析器及 scws 词典正确安装。

2. 查看数据库的编码(对于 postgresql 数据库来说,就是执行 \l 进行查看),要是 UTF8|zh_CN.UTF-8 | zh_CN.UTF-8 格式的。

3. (本点也是根本解决了我的问题), 执行 ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l,j WITH simple; 修改全文搜索配置 token 映射。

!> 注:当安装完毕之后 执行 select to_tsvector('testzhcfg', '好看女子千千万,一切如作白骨观'); 如果只是出现了查询结果为 t,却没有显示分词效果,就说明你少了 token 映射.

4. 如果对于分词不理想,可以修改一下 postgresql 的 postgresql.conf 文件,增加下面几行:

	zhparser.multi_short = true #短词复合: 1
	zhparser.multi_duality = true  #散字二元复合: 2
	zhparser.multi_zmain = true  #重要单字复合: 4
	zhparser.multi_zall = false  #全部单字复合: 8


btw: ts_debug, to_tsvector, to_tsquery 可以做些测试.



基本就是这样了,多想多试。
2676 次点击
所在节点    PostgreSQL
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706940

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX