Open kmblack1 opened 6 months ago
PostgreSQL是多进程,pg_jieba的字典数据在每个进程中都加载了比较耗费内存,个人觉得字典数据应该加载在share_buffers中.
使用字典中不存在的关键字"新华三" 证明如下:
select to_tsvector('public.jiebacfg', '新华三');
输出,A和B结果完全相同
to_tsvector ----------------- '三':2 '新华':1 (1 行记录)
在服务器上修改文件jieba_user.dict
sudo vim jieba_user.dict
在用户字典中添加关键字"新华三"
云计算 韩玉鉴赏 蓝翔 nz 区块链 10 nz 新华三
--重新加载字典 select jieba_reload_dict(); select to_tsvector('public.jiebacfg', '新华三');
终端A输出
to_tsvector ------------- '新华三':1 (1 行记录)
--因为已经在终端A中加载过字典了,所以终端B中不再加载 select to_tsvector('public.jiebacfg', '新华三');
终端B输出
终端A和终端B中的结果完全不同
1 重启服务器,但生产环境不允许这么做; 2 修改字典后在每个连接在开始分词之前都需要重新加载字典;
PostgreSQL是多进程,pg_jieba的字典数据在每个进程中都加载了比较耗费内存,个人觉得字典数据应该加载在share_buffers中.
使用字典中不存在的关键字"新华三" 证明如下:
1 启动二个psql客户端,分别为A和B,在A和B中分别执行
输出,A和B结果完全相同
2 添加关键字
在服务器上修改文件jieba_user.dict
在用户字典中添加关键字"新华三"
3 终端A
终端A输出
4 终端B
终端B输出
终端A和终端B中的结果完全不同
5 解决方法:
1 重启服务器,但生产环境不允许这么做; 2 修改字典后在每个连接在开始分词之前都需要重新加载字典;