V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kcelone
V2EX  ›  PostgreSQL

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

  •  
  •   Kcelone · 2020-09-14 17:47:21 +08:00 · 2635 次点击
    这是一个创建于 1523 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在做项目过程中,使用了 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 可以做些测试.
    
    
    
    基本就是这样了,多想多试。
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2842 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:35 · PVG 21:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.