fengkx / postgres-docker

Self-use postgres docker image with chinese fulltext search and somes extra extensions
https://hub.docker.com/r/fengkx/postgres
7 stars 3 forks source link

在替换该Docker镜像之后依然存在中文分词的问题 #2

Open einverne opened 3 years ago

einverne commented 3 years ago

从 PostgreSQL 官方的镜像替换成该镜像之后,依然无法获取很好的中文搜索结果。

比如想要搜索标题中带「韩国」的文章,出现的结果并没有包含「疯狂打击补课的韩国,后来怎么样了」这一条。

而使用 「疯狂打击补课的韩国」去搜索是可以搜索得到。

不清楚哪里还需要做调整,先开一个 issue 之后再仔细研究一下。

fengkx commented 3 years ago

这个问题确实存在。我觉得主要在于分词算法和词库吧。还需要确认这里说的搜索具体用到的SQL是什么。

中文分词和词库用的是 scws 是比较老的了。zhparser提供了自定义词库的功能,但是我尝试过加词分词效果更差了(应该是我用法有问题)

TheAnsIs42 commented 1 month ago

我也遇到了这个问题,我是用作miniflux的数据库。试下来似乎是没有分词,只有标点符号间的完整语句能搜索到。

fengkx commented 1 month ago

我也遇到了这个问题,我是用作miniflux的数据库。试下来似乎是没有分词,只有标点符号间的完整语句能搜索到。

image

我也用在miniflux,分词是可用的。可以参考 https://github.com/fengkx/docker-miniflux-postgresql

如果是中途切换的镜像需要手动触发 update,让Postgres重建索引

TheAnsIs42 commented 1 month ago

如果是中途切换的镜像需要手动触发 update,让Postgres重建索引

请问怎么手动出发update,没怎么用过postgres,是REINDEX

fengkx commented 1 month ago

update entries set content=content;

TheAnsIs42 commented 1 month ago

不知道是什么原因,这个好像没更新 document_vectors , 但是通过以下步骤可以更新 document_vectors 的分词结果

  1. 设置 postgresql.conf 里 default_text_search_config'chinese'
  2. psql 里连接到miniflux数据库后运行

update entries set document_vectors = setweight(to_tsvector(left(coalesce(title, ''), 500000)), 'A') || setweight(to_tsvector(left(coalesce(content, ''), 500000)), 'B');

↑这样应该会和 miniflux的搜索 保持一致

但是这样会将内容里面的链接也一起分词,不知道有没有更好的解决办法。

fengkx commented 1 month ago
  1. https://github.com/fengkx/postgres-docker/blob/6f67fbb2b4f3d84e581e27ef52ae42604e05b3e2/init_extension.sh#L12 已经设置了
  2. 应该无解
iqyiqy commented 1 month ago

我也遇到了这个问题,我是用作miniflux的数据库。试下来似乎是没有分词,只有标点符号间的完整语句能搜索到。

我也是这几天,试着搭个rss用用。对比选择了miniflux之后。用了两三天,突然发现的这个问题。 要是用第三方客户端,不用这个王爷,应该不用在意这个。 就是会有点不完美的感觉。

然后发现之前放弃的freshrss,默认就能搜到。而且随便分词都可以。虽然可能更占资源,但是少搭建个数据库。 准备之后用freshrss看看了。