在线统计

在线会员
0
在线游客
20
会员总计
20
  • 游客:您有一个20余烬兑换码:202506015318有效期7天.请尽快兑换.

什么是 Mastodon?

配置全文搜索

设置 Elasticsearch 以搜索状态(authored、favorites 或 mentioned)、公有可索引状态和帐户

当 Elasticsearch 可用时,Mastodon 支持全文搜索。强烈建议配置此功能。

Mastodon 的全文搜索允许登录用户从以下位置查找结果:

  • 选择显示在搜索结果中的账户的公开状态
  • 他们自己的状态
  • 他们的提及
  • 他们的最爱
  • 他们的书签
  • 帐户(显示名称、用户名和 BIOS)
它故意不允许在整个数据库中搜索任意字符串。

安装 Elasticsearch​

Mastodon 使用 Elasticsearch 版本 7 进行了测试。它应该支持 OpenSearch 以及 Elasticsearch 版本 6 和 8,但这些设置不受官方支持。

将官方 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 应该只绑定到 localhost,即无法从外部网络访问。您可以通过查看 /etc/elasticsearch/elasticsearch.yml 中的 network.host 来检查 Elasticsearch 绑定到哪个地址。考虑到任何可以访问 Elasticsearch 的人都可以访问和修改其中的任何数据,因为没有身份验证层。因此,确保访问的安全性非常重要。建议使用仅暴露 22、80 和 443 端口的防火墙,如主要安装说明中所述。如果您有多主机设置,则必须知道如何保护内部流量。

启动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设置相比,索引将配置更多的碎片,以允许它们通过更多节点分布
如果您在同一台计算机上有多个MASTODON服务器,并且计划为所有机器使用相同的ElasticSearch安装,请确保所有这些服务器都具有唯一的REDIS_NAMESPACE,以区分工具。如果您需要覆盖Elasticsearch Indices的前缀,则可以直接设置ES_PREFIX。

安全​

默认情况下,Elasticsearch不处理任何身份验证,并且每个请求均通过完整的管理权制定。我们强烈建议您在群集上配置Elasticsearch安全功能。

要配置它,请参考<SD1>官方文档。它将指导您:

  • 启用安全功能(xpack.security.enabled: true)
  • 为内置用户创建密码
完成后,您可以为Mastodon创建一个自定义角色。

例如(请调整此片段以使用弹性管理密码):

代码:
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指出,可能需要比JVM(Java Virtual Machine)更多的内存。如果Elasticsearch在创建指示时崩溃,请尝试分配更多内存。

  1. 在目录中创建并打开一个文件/etc/elasticsearch/jvm.options.d/(例如:nano /etc/elasticsearch/jvm.options.d/ram.options)
  2. 添加以下文本并为您的需求编辑分配的内存。根据经验,Elasticsearch应使用约25%-50%的可用内存。不要分配比可用的更多的内存。
代码:
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
# Both values should be the same
-Xms2048m
-Xmx2048m

  1. 保存文件。
  2. 使用systemctl restart elasticsearch。
  3. 重试创建Elasticsearch指示。如果Elasticsearch仍在崩溃,请尝试设置更高的数字。

其他语言的搜索优化​


中文搜索优化​


标准分析仪是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: {

评论

目前没有任何评论.

笔记文章信息

作者
波坤太叔
查看
175
最后更新

More entries in 经验折腾

More entries from 波坤太叔

分享这个文章页面

社区
规则 帮助 用户
  • 目前没有人在聊天。
  • 波坤太叔 @ 波坤太叔:
    @dindacantik2 有安装说明文档
  • 波坤太叔 @ 波坤太叔:
    (AI 提示) 如何部署 cloudflare 与 xenforo 的 Workers
  • DeepSeek @ DeepSeek:
    @波坤太叔, # 部署 Cloudflare Workers 与 XenForo 的集成指南

    要将 Cloudflare Workers 与 XenForo 论坛软件集成,您可以按照以下步骤操作:

    ## 基本设置步骤

    1. **准备工作**
    - 确保您拥有 Cloudflare 账户且您的域名已通过 Cloudflare 管理
    - 拥有 XenForo 管理员权限

    2. **创建 Cloudflare Worker**
    - 登录 Cloudflare 仪表板
    - 导航
  • W @ William:
    这是deepseek吗
  • 波坤太叔 @ 波坤太叔:
    William 说:
    这是deepseek吗
    是的
  • 狼哥 狼哥:
    William 已离开房间。
      狼哥 狼哥: William 已离开房间。
      Cart