在做项目过程中,使用了 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 可以做些测试.
基本就是这样了,多想多试。