您的足迹: zh-search

官方现已支持配置中文

这是本文档旧的修订版!


Pleroma 配置中文搜索的思路(未验证)

注意!本页面只是记录配置的可能思路,完全没有验证过思路的可行性!请谨慎考量!请谨慎考量!请谨慎考量!

因为这个思路目前还没走通。这部分内容可能需要操作者对 postgresql 有相当的熟悉度才能进行。

(请做好备份!请做好备份!请做好备份!)

另外,动了搜索配置后,Pleroma 的备份以及恢复可能会有更多的问题。但因我的实例并不是全新安装,没有成功配置,所以此处可能不能继续尝试解决方案。这方面也请谨慎考量。请谨慎考量。请谨慎考量。 在尝试时,最好也尝试配置完中文搜索后,再进行备份,再尝试恢复新备份。因为新的备份包含中文搜索的信息,所以恢复时可能也需要额外配置。我没能尝试这部分的操作。个人建议是将这些后续操作都尝试确定无误后再到真正的日用服务器上应用。

Pleroma 搜索系统

Pleroma 搜索系统使用的是 postgresql 的全文搜索,并且似乎在数据表格中建立了一个索引列用来方便查找。

Postgresql 的全文搜索很重要的是 parser 以及 text search config ,其默认使用 english 作为搜索配置(Pleroma 也是默认 english),这也就很容易理解为什么这中文搜索这么烂了。

但其实其它自带的搜索配置全都不支持中文,所以我们要使用额外的配置。

另外,因为 pleroma 建立了一个索引列,所以我们是不能够在安装了 pleroma 之后再更改搜索配置的。但是有可能通过“备份 pleroma—配置搜索—恢复 pleroma 备份”来实现更改配置。

全新安装的配置思路

如果您使用的是官方的 Pleroma OTP 安装教程,则应在:su postgres -s $SHELL -lc “psql -f /tmp/setup_db.psql” 这一步之后,在 su pleroma -s $SHELL -lc “./bin/pleroma_ctl migrate” 这一步之前,进行 pg_jieba 的配置。

具体流程

还是说一下吧。 在跟着 Installing Pleroma 安装时,进行到这一步 Installing Pleroma 要输一大堆命令时,注意,输到这一行时:

# Create the postgres database
su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"

停下来。(准确来说是输完后执行完后停下来。)

先不要输下一行命令。(这个时候您的下一行命令应该是:

# Create the database schema
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"

不要输这一行命令,我们先开始配置中文搜索。

安装 pg_jiebajaiminpan/pg_jieba 在 Ubuntu 上的安装方法是:(请先用

psql --version

找到版本号,比如 psql (PostgreSQL) 12.5 版本号就是 12

  • sudo apt install postgresql-server-dev-版本号 gcc g++ cmake make
  • cd pg_jieba
  • git submodule update --init --recursive
  • mkdir build
  • cd build
  • cmake ..
  • make
  • sudo make install
  • sudo systemctl restart postgresql

安装好后: 按下面命令把 english 配置替换为 pg_jieba 的配置:先进入 postgresql 管理员控制台:

sudo -Hu postgres psql

在 postgresql 控制台分别:进入 pleroma 数据库,创建 pg_jieba 相关配置,删除 english 配置,把 jiebaqry 复制成新的 english,最后 \q 退出:

\c pleroma;
CREATE EXTENSION pg_jieba;
DROP TEXT SEARCH CONFIGURATION english;
CREATE TEXT SEARCH CONFIGURATION english(COPY=jiebaqry);
\q

这个时候您就可以接着进行原有的安装了。(整体上也就是:

# Create the postgres database
su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"

<---------------------------------------- 我们这里插进了我们中文搜索的配置,
<---------------------------------------- 其它安装命令不变

# Create the database schema
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"

已有安装的配置思路

警告:我之前按这个思路尝试配置时失败了。可能与 postgresql 本身的一些默认配置以及配置的各种依赖关系有关。炸服务器时尝试时请做好备份。请做好备份。请做好备份。(不仅要备份数据库,还要备份 config.exs 等配置文件,详见 官网教程 。)

失败的一些笔记

姑且在这里放一些失败的尝试,希望能有所帮助。(在尝试前还是请做好备份。)(只是尝试的话还是推荐不要用数据过多的服务器,否则数据恢复会很慢,要等半天才能知道到底是否出错了。)

一般来说出错都是在恢复数据时出错,可以通过:

sudo -Hu postgres psql -c 'DROP DATABASE <pleroma_db>;';
sudo su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"

来清除对数据库做的更改。

我当时的一个尝试是修改 postgresql 的默认搜索配置,在 /etc/postgresql/12/main/postgresql.conf 或其它路径的配置文件中找到 default_text_search_config 一项,修改为:

default_text_search_config = 'public.jiebaqry'

这个在当时似乎可以让数据的恢复进度增加,但是在之后又会遇到新的出错。

我当时因为配置有点问题(我在备份前就修改了数据库),所以会有额外出错。(这也是我认为中文搜索配置会让数据的备份和恢复变得困难的原因。)这个应该大家大概率不会用到,但是说不定在配置中文搜索后的备份和恢复时需要用到。这个时候可以使用备份数据的 目录(Table of Contents) 来达到跳过出错语句的目的。可以参考 https://stackoverflow.com/a/39831653 。请在确认出错语句不包含必要信息后再操作。

一、备份 pleroma

二、重装 pleroma,但不恢复数据

三、配置搜索配置

数据库也重建一下,用来把索引列清掉。(按官方教程重装时应该会有一个 /tmp/setup_db.psql 的文件,需要使用这个文件。)

sudo -Hu postgres psql -c 'DROP DATABASE <pleroma_db>;';
sudo su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"

安装配置 ''pg_jieba''

安装 pg_jiebajaiminpan/pg_jieba

  • pg_jieba 在 Ubuntu 上需要安装 postgresql-server-dev-版本号 gcc g++ cmake make
  • 不要忘记重启 postgresql: sudo systemctl restart postgresql

english 配置替换为 pg_jieba 的配置:先进入 postgresql 控制台:

sudo -Hu postgres psql

在 postgresql 控制台分别:进入 pleroma 数据库,删除 english 配置,把 jiebaqry 复制成新的 english

\c pleroma;
CREATE EXTENSION pg_jieba;
DROP TEXT SEARCH CONFIGURATION english;
CREATE TEXT SEARCH CONFIGURATION english(COPY=jiebaqry);
\q

四、恢复 pleroma 数据