配置全文搜索
设置 Elasticsearch 以搜索状态(authored、favorites 或 mentioned)、公有可索引状态和帐户
当 Elasticsearch 可用时,Mastodon 支持全文搜索。强烈建议配置此功能。
Mastodon 的全文搜索允许登录用户从以下位置查找结果:
将官方 Elasticsearch 仓库添加到 apt:
现在您可以安装 Elasticsearch:
启动Elasticsearch:
编辑.env.production添加以下变量:
Note :如果使用TLS,请使用https://预留主机名。例如:https://elastic.example.com。
要配置它,请参考<SD1>官方文档。它将指导您:
例如(请调整此片段以使用弹性管理密码):
用于创建角色的 Elasticsearch 文档
创建角色后,你可以创建一个用户供 Mastodon 服务器使用,并为其分配角色。
例如(请调整此代码段以使用您的 Elastic 管理员密码,并自定义您的新用户 mastodon 用户密码):
用于创建用户的 Elasticsearch 文档
完成此作后,你需要配置 Mastodon 以使用新创建的用户的凭据。
在 .env.production 中,调整您的配置
一切就绪,您的 Elasticsearch 服务器应该会更加安全!
保存新配置后,重新启动 Mastodon 进程以使其生效:
标准分析仪是Elasticsearch的默认设备,但是对于某些语言,例如中文可能不是最佳选择。为了增强搜索体验,请考虑安装特定语言的分析仪。在Elasticsearch创建索引之前,请确保安装以下扩展名:
然后修改Mastodon的索引定义如下:
当 Elasticsearch 可用时,Mastodon 支持全文搜索。强烈建议配置此功能。
Mastodon 的全文搜索允许登录用户从以下位置查找结果:
- 选择显示在搜索结果中的账户的公开状态
- 他们自己的状态
- 他们的提及
- 他们的最爱
- 他们的书签
- 帐户(显示名称、用户名和 BIOS)
安装 Elasticsearch
将官方 Elasticsearch 仓库添加到 apt:
代码:
wget -O /usr/share/keyrings/elasticsearch.asc https://artifacts.elastic.co/GPG-KEY-elasticsearch
echo "deb [signed-by=/usr/share/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list
现在您可以安装 Elasticsearch:
代码:
apt update
apt install elasticsearch
启动Elasticsearch:
代码:
systemctl daemon-reload
systemctl enable --now elasticsearch
配置 Mastodon
编辑.env.production添加以下变量:
代码:
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
ES_PRESET= # single_node_cluster, small_cluster or large_cluster
# ES_USER=
# ES_PASS=
Note :如果使用TLS,请使用https://预留主机名。例如:https://elastic.example.com。
选择正确的预设
ES_PRESET取决于您的elasticsearch的大小,并将用于设置索引的碎片和副本的数量,以使您的设置为最佳值:- single_node_cluster如果您的elasticsearch群集中只有一个节点。索引将被配置而没有任何副本
- small_cluster如果群集中的节点少于6个节点。索引将配置为1个复制品
- large_cluster如果群集中有6个或更多节点。与small_cluster设置相比,索引将配置更多的碎片,以允许它们通过更多节点分布
安全
默认情况下,Elasticsearch不处理任何身份验证,并且每个请求均通过完整的管理权制定。我们强烈建议您在群集上配置Elasticsearch安全功能。要配置它,请参考<SD1>官方文档。它将指导您:
- 启用安全功能(xpack.security.enabled: true)
- 为内置用户创建密码
例如(请调整此片段以使用弹性管理密码):
代码:
curl -X POST -u elastic:admin_password "localhost:9200/_security/role/mastodon_full_access?pretty" -H 'Content-Type: application/json' -d'
{
"cluster": ["monitor"],
"indices": [{
"names": ["*"],
"privileges": ["read", "monitor", "write", "manage"]
}]
}
'
用于创建角色的 Elasticsearch 文档
创建角色后,你可以创建一个用户供 Mastodon 服务器使用,并为其分配角色。
例如(请调整此代码段以使用您的 Elastic 管理员密码,并自定义您的新用户 mastodon 用户密码):
代码:
curl -X POST -u elastic:admin_password "localhost:9200/_security/user/mastodon?pretty" -H 'Content-Type: application/json' -d'
{
"password" : "l0ng-r4nd0m-p@ssw0rd",
"roles" : ["mastodon_full_access"]
}
'
用于创建用户的 Elasticsearch 文档
完成此作后,你需要配置 Mastodon 以使用新创建的用户的凭据。
在 .env.production 中,调整您的配置
代码:
ES_USER=mastodon
ES_PASS=l0ng-r4nd0m-p@ssw0rd
一切就绪,您的 Elasticsearch 服务器应该会更加安全!
填充索引
保存新配置后,重新启动 Mastodon 进程以使其生效:
代码:
su - mastodon
cd live
RAILS_ENV=production bin/tootctl search deploy
其他语言的搜索优化
中文搜索优化
标准分析仪是Elasticsearch的默认设备,但是对于某些语言,例如中文可能不是最佳选择。为了增强搜索体验,请考虑安装特定语言的分析仪。在Elasticsearch创建索引之前,请确保安装以下扩展名:
然后修改Mastodon的索引定义如下:
Git:
diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb
--- a/app/chewy/accounts_index.rb
+++ b/app/chewy/accounts_index.rb
@@ -4,7 +4,7 @@ class AccountsIndex < Chewy::Index
settings index: { refresh_interval: '5m' }, analysis: {
analyzer: {
content: {
- tokenizer: 'whitespace',
+ tokenizer: 'ik_max_word',
filter: %w(lowercase asciifolding cjk_width),
},
diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb
--- a/app/chewy/statuses_index.rb
+++ b/app/chewy/statuses_index.rb
@@ -16,9 +16,17 @@ class StatusesIndex < Chewy::Index
language: 'possessive_english',
},
},
+ char_filter: {
+ tsconvert: {
+ type: 'stconvert',
+ keep_both: false,
+ delimiter: '#',
+ convert_type: 't2s',
+ },
+ },
analyzer: {
content: {
- tokenizer: 'uax_url_email',
+ tokenizer: 'ik_max_word',
filter: %w(
english_possessive_stemmer
lowercase
@@ -27,6 +35,7 @@ class StatusesIndex < Chewy::Index
english_stop
english_stemmer
),
+ char_filter: %w(tsconvert),
},
},
}
diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb
--- a/app/chewy/tags_index.rb
+++ b/app/chewy/tags_index.rb
@@ -2,10 +2,19 @@
class TagsIndex < Chewy::Index
settings index: { refresh_interval: '15m' }, analysis: {
+ char_filter: {
+ tsconvert: {
+ type: 'stconvert',
+ keep_both: false,
+ delimiter: '#',
+ convert_type: 't2s',
+ },
+ },
analyzer: {
content: {
- tokenizer: 'keyword',
+ tokenizer: 'ik_max_word',
filter: %w(lowercase asciifolding cjk_width),
+ char_filter: %w(tsconvert),
},
edge_ngram: {