<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>影子屋 (文章分类：full-text search)</title><link>https://blog.bgme.me/</link><description></description><atom:link href="https://blog.bgme.me/categories/full-text-search.xml" rel="self" type="application/rss+xml"></atom:link><language>zh_cn</language><copyright>Contents © 2024 &lt;a href="mailto:i@bgme.me"&gt;无影人&lt;/a&gt; 
&lt;a rel="license noopener nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/4.0/" class="ui image" title="如无特别说明，本站文章均遵循 CC BY-SA 4.0 协议，转载请注明作者及出处。"&gt;
&lt;img alt="Creative Commons Attribution-ShareAlike 4.0 International License" src="/license.png"&gt;
&lt;/a&gt;
</copyright><lastBuildDate>Wed, 24 Apr 2024 12:02:14 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>开启长毛象全文搜索功能</title><link>https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/</link><dc:creator>无影人</dc:creator><description>&lt;p&gt;你可能一直在为长毛象的搜索功能太弱而苦恼，不过这种状态在 v2.7.0 后有了很大的改观。&lt;/p&gt;
&lt;p&gt;Mastodon v2.7.0 添加了全文搜索功能。
开启全文搜索功能之后，网站用户可以很方便的搜索到想找的嘟嘟。&lt;/p&gt;
&lt;p&gt;下面我将以 Debian 9 系统为例，介绍如何开启长毛象全文搜索功能。&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;section id="java"&gt;
&lt;h2&gt;安装 Java&lt;/h2&gt;
&lt;p&gt;Elasticsearch 需要 Java 8 或者更高的版本。&lt;/p&gt;
&lt;p&gt;你可以安装 Oracle Java 或 OpenJDK，此处将使用官方仓库中的 openjdk 8。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_49fd3d56528f47f2967e7d5f908b6ba6-1" name="rest_code_49fd3d56528f47f2967e7d5f908b6ba6-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_49fd3d56528f47f2967e7d5f908b6ba6-1"&gt;&lt;/a&gt;apt install openjdk-8-jre
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="elasticsearch"&gt;
&lt;h2&gt;安装 Elasticsearch&lt;/h2&gt;
&lt;p&gt;添加 Elasticsearch PGP Key&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_92e79cdd5a5c4ac18432778cd39b614f-1" name="rest_code_92e79cdd5a5c4ac18432778cd39b614f-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_92e79cdd5a5c4ac18432778cd39b614f-1"&gt;&lt;/a&gt;wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;添加 APT 仓库&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_79ec39ce058241f798f1cf27bf4c8738-1" name="rest_code_79ec39ce058241f798f1cf27bf4c8738-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_79ec39ce058241f798f1cf27bf4c8738-1"&gt;&lt;/a&gt;echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装 Elasticsearch&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_dc9a28279bf446429120610b653f8d2b-1" name="rest_code_dc9a28279bf446429120610b653f8d2b-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dc9a28279bf446429120610b653f8d2b-1"&gt;&lt;/a&gt;apt update &amp;amp;&amp;amp; apt install elasticsearch
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="systemd-service"&gt;
&lt;h2&gt;配置 systemd service&lt;/h2&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_4345a6e95cf842408e9daf95f7a20aeb-1" name="rest_code_4345a6e95cf842408e9daf95f7a20aeb-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_4345a6e95cf842408e9daf95f7a20aeb-1"&gt;&lt;/a&gt;systemctl enable elasticsearch.service
&lt;a id="rest_code_4345a6e95cf842408e9daf95f7a20aeb-2" name="rest_code_4345a6e95cf842408e9daf95f7a20aeb-2" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_4345a6e95cf842408e9daf95f7a20aeb-2"&gt;&lt;/a&gt;systemctl start elasticsearch.service
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;运行上述命令之后，访问 &lt;a class="reference external" href="http://localhost:9200"&gt;http://localhost:9200&lt;/a&gt; ，确认 Elasticsearch 已经运行。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="mastodon"&gt;
&lt;h2&gt;配置 Mastodon&lt;/h2&gt;
&lt;p&gt;在 &lt;code class="docutils literal"&gt;.env.production&lt;/code&gt; 文件中添加以下行：&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_edbde3f687eb4ea1b7fb98681194cc9f-1" name="rest_code_edbde3f687eb4ea1b7fb98681194cc9f-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_edbde3f687eb4ea1b7fb98681194cc9f-1"&gt;&lt;/a&gt;ES_ENABLED=true
&lt;a id="rest_code_edbde3f687eb4ea1b7fb98681194cc9f-2" name="rest_code_edbde3f687eb4ea1b7fb98681194cc9f-2" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_edbde3f687eb4ea1b7fb98681194cc9f-2"&gt;&lt;/a&gt;ES_HOST=localhost
&lt;a id="rest_code_edbde3f687eb4ea1b7fb98681194cc9f-3" name="rest_code_edbde3f687eb4ea1b7fb98681194cc9f-3" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_edbde3f687eb4ea1b7fb98681194cc9f-3"&gt;&lt;/a&gt;ES_PORT=9200
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重启服务&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_2c24a5475ea8418bb22f224c0dcb4401-1" name="rest_code_2c24a5475ea8418bb22f224c0dcb4401-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_2c24a5475ea8418bb22f224c0dcb4401-1"&gt;&lt;/a&gt;systemctl restart mastodon-sidekiq.service mastodon-streaming.service mastodon-web.service
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;创建索引&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_46c5b0da42ed40f0b0086fd8333a1acc-1" name="rest_code_46c5b0da42ed40f0b0086fd8333a1acc-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_46c5b0da42ed40f0b0086fd8333a1acc-1"&gt;&lt;/a&gt;su - mastodon
&lt;a id="rest_code_46c5b0da42ed40f0b0086fd8333a1acc-2" name="rest_code_46c5b0da42ed40f0b0086fd8333a1acc-2" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_46c5b0da42ed40f0b0086fd8333a1acc-2"&gt;&lt;/a&gt;cd live
&lt;a id="rest_code_46c5b0da42ed40f0b0086fd8333a1acc-3" name="rest_code_46c5b0da42ed40f0b0086fd8333a1acc-3" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_46c5b0da42ed40f0b0086fd8333a1acc-3"&gt;&lt;/a&gt;RAILS_ENV=production bin/rails chewy:deploy
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="section-1"&gt;
&lt;h2&gt;结语&lt;/h2&gt;
&lt;p&gt;完成上述步骤之后，你可以打开管理页面确认已经开启全文搜索功能。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2019/full-text-search-for-mastodon/admin.png"&gt;&lt;img alt="/images/2019/full-text-search-for-mastodon/admin.thumbnail.png" src="https://blog.bgme.me/images/2019/full-text-search-for-mastodon/admin.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;管理页面&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;现在，你可以尽情享受全文搜索的便利了。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="/images/2019/full-text-search-for-mastodon/full-text-search.png" src="https://blog.bgme.me/images/2019/full-text-search-for-mastodon/full-text-search.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;全文搜索&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="section-2"&gt;
&lt;h2&gt;性能优化（可选）&lt;/h2&gt;
&lt;p&gt;首先 Elasticsearch 需要使用大量内存，你可以参考&lt;a class="reference external" href="https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html"&gt;这个文档&lt;/a&gt;。&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;但是根据 Mastodon 官方的说法，实际上不需要分配这么多内存给 Elasticsearch。&lt;/p&gt;
&lt;p&gt;当你在低内存的 VPS 上使用 Elasticsearch 时，你必须要修改 Elasticsearch 的配置文件。&lt;/p&gt;
&lt;p&gt;修改 &lt;code class="docutils literal"&gt;/etc/elasticsearch/jvm.options&lt;/code&gt; 文件的这些行：&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_217fa7079d8d43d384e0dabfd28ee940-1" name="rest_code_217fa7079d8d43d384e0dabfd28ee940-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_217fa7079d8d43d384e0dabfd28ee940-1"&gt;&lt;/a&gt;# Xms represents the initial size of total heap space
&lt;a id="rest_code_217fa7079d8d43d384e0dabfd28ee940-2" name="rest_code_217fa7079d8d43d384e0dabfd28ee940-2" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_217fa7079d8d43d384e0dabfd28ee940-2"&gt;&lt;/a&gt;# Xmx represents the maximum size of total heap space
&lt;a id="rest_code_217fa7079d8d43d384e0dabfd28ee940-3" name="rest_code_217fa7079d8d43d384e0dabfd28ee940-3" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_217fa7079d8d43d384e0dabfd28ee940-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_217fa7079d8d43d384e0dabfd28ee940-4" name="rest_code_217fa7079d8d43d384e0dabfd28ee940-4" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_217fa7079d8d43d384e0dabfd28ee940-4"&gt;&lt;/a&gt;-Xms1g
&lt;a id="rest_code_217fa7079d8d43d384e0dabfd28ee940-5" name="rest_code_217fa7079d8d43d384e0dabfd28ee940-5" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_217fa7079d8d43d384e0dabfd28ee940-5"&gt;&lt;/a&gt;-Xmx1g
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;想知道该设置多少内存？
你可以参考下面的表格。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th class="head"&gt;&lt;p&gt;Memory&lt;/p&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;p&gt;Xms&lt;/p&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;p&gt;Xmx&lt;/p&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;1GB&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;256m&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;256m&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;2GB&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;512m&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;512m&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;3GB&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;1g&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;1g&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p&gt;4GB&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;2g&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;2g&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;修改配置之后，重启 Elasticsearch。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_02667b90ef4b423e9f9cc3a0ccdfa65e-1" name="rest_code_02667b90ef4b423e9f9cc3a0ccdfa65e-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_02667b90ef4b423e9f9cc3a0ccdfa65e-1"&gt;&lt;/a&gt;systemctl restart elasticsearch.service
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="section-3"&gt;
&lt;h2&gt;中文搜索优化&lt;/h2&gt;
&lt;p&gt;ElasticSearch默认使用标准分析器，这对于中文来说可能并不太适合。为了提高搜索体验，你可以安装特定语言的专用分析器。在创建ElasticSearch索引之前执行：&lt;/p&gt;
&lt;p&gt;安装 &lt;a class="reference external" href="https://github.com/medcl/elasticsearch-analysis-ik"&gt;elasticsearch-analysis-ik&lt;/a&gt;、&lt;a class="reference external" href="https://github.com/medcl/elasticsearch-analysis-stconvert"&gt;elasticsearch-analysis-stconvert&lt;/a&gt; 插件至 ElasticSearch。&lt;/p&gt;
&lt;p&gt;并对源码做出如下修改：&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code diff"&gt;&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-1" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-1" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-1"&gt;&lt;/a&gt;&lt;span class="gh"&gt;diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-2" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-2" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-2"&gt;&lt;/a&gt;&lt;span class="gd"&gt;--- a/app/chewy/accounts_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-3" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-3" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-3"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+++ b/app/chewy/accounts_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-4" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-4" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-4"&gt;&lt;/a&gt;&lt;span class="gu"&gt;@@ -4,7 +4,7 @@ class AccountsIndex &amp;lt; Chewy::Index&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-5" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-5" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-5"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt; settings index: { refresh_interval: '5m' }, analysis: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-6" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-6" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-6"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;   analyzer: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-7" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-7" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-7"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     content: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-8" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-8" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-8"&gt;&lt;/a&gt;&lt;span class="gd"&gt;-        tokenizer: 'whitespace',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-9" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-9" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-9"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        tokenizer: 'ik_max_word',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-10" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-10" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-10"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;       filter: %w(lowercase asciifolding cjk_width),
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-11" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-11" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-11"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     },
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-12" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-12" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-12"&gt;&lt;/a&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-13" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-13" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-13"&gt;&lt;/a&gt;&lt;span class="gh"&gt;diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-14" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-14" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-14"&gt;&lt;/a&gt;&lt;span class="gd"&gt;--- a/app/chewy/statuses_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-15" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-15" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-15"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+++ b/app/chewy/statuses_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-16" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-16" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-16"&gt;&lt;/a&gt;&lt;span class="gu"&gt;@@ -16,9 +16,17 @@ class StatusesIndex &amp;lt; Chewy::Index&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-17" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-17" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-17"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;       language: 'possessive_english',
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-18" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-18" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-18"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     },
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-19" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-19" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-19"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;   },
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-20" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-20" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-20"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+    char_filter: {&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-21" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-21" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-21"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+      tsconvert: {&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-22" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-22" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-22"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        type: 'stconvert',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-23" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-23" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-23"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        keep_both: false,&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-24" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-24" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-24"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        delimiter: '#',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-25" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-25" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-25"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        convert_type: 't2s',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-26" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-26" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-26"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+      },&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-27" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-27" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-27"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+    },&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-28" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-28" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-28"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;   analyzer: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-29" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-29" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-29"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     content: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-30" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-30" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-30"&gt;&lt;/a&gt;&lt;span class="gd"&gt;-        tokenizer: 'uax_url_email',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-31" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-31" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-31"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        tokenizer: 'ik_max_word',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-32" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-32" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-32"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;       filter: %w(
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-33" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-33" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-33"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;         english_possessive_stemmer
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-34" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-34" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-34"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;         lowercase
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-35" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-35" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-35"&gt;&lt;/a&gt;&lt;span class="gu"&gt;@@ -27,6 +35,7 @@ class StatusesIndex &amp;lt; Chewy::Index&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-36" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-36" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-36"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;         english_stop
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-37" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-37" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-37"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;         english_stemmer
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-38" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-38" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-38"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;       ),
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-39" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-39" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-39"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        char_filter: %w(tsconvert),&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-40" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-40" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-40"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     },
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-41" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-41" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-41"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;   },
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-42" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-42" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-42"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt; }
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-43" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-43" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-43"&gt;&lt;/a&gt;&lt;span class="gh"&gt;diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-44" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-44" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-44"&gt;&lt;/a&gt;&lt;span class="gd"&gt;--- a/app/chewy/tags_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-45" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-45" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-45"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+++ b/app/chewy/tags_index.rb&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-46" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-46" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-46"&gt;&lt;/a&gt;&lt;span class="gu"&gt;@@ -2,10 +2,19 @@&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-47" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-47" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-47"&gt;&lt;/a&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-48" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-48" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-48"&gt;&lt;/a&gt;class TagsIndex &amp;lt; Chewy::Index
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-49" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-49" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-49"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt; settings index: { refresh_interval: '15m' }, analysis: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-50" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-50" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-50"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+    char_filter: {&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-51" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-51" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-51"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+      tsconvert: {&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-52" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-52" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-52"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        type: 'stconvert',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-53" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-53" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-53"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        keep_both: false,&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-54" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-54" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-54"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        delimiter: '#',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-55" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-55" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-55"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        convert_type: 't2s',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-56" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-56" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-56"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+      },&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-57" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-57" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-57"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+    },&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-58" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-58" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-58"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;   analyzer: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-59" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-59" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-59"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     content: {
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-60" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-60" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-60"&gt;&lt;/a&gt;&lt;span class="gd"&gt;-        tokenizer: 'keyword',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-61" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-61" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-61"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        tokenizer: 'ik_max_word',&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-62" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-62" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-62"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;       filter: %w(lowercase asciifolding cjk_width),
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-63" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-63" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-63"&gt;&lt;/a&gt;&lt;span class="gi"&gt;+        char_filter: %w(tsconvert),&lt;/span&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-64" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-64" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-64"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     },
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-65" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-65" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-65"&gt;&lt;/a&gt;
&lt;a id="rest_code_dcb828c82d5743cabe588f0eeb9a5654-66" name="rest_code_dcb828c82d5743cabe588f0eeb9a5654-66" href="https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/#rest_code_dcb828c82d5743cabe588f0eeb9a5654-66"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;     edge_ngram: {
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果已经创建索引，请运行 &lt;code class="docutils literal"&gt;tootctl search deploy&lt;/code&gt; 重建索引，如果索引较大，本操作将花费较长时间。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="section-4"&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/tootsuite/mastodon/pull/6423"&gt;Full-text search for authorized statuses - Pull Request&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/tootsuite/mastodon/commit/3ebc0ad4d3c2fe0b0951a334642b769bd521a799"&gt;Full-text search for authorized statuses&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html"&gt;Install Elasticsearch with Debian Package&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md"&gt;Elasticsearch Guide&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class="admonition note"&gt;
&lt;p class="admonition-title"&gt;注解&lt;/p&gt;
&lt;p&gt;本文以 GNU Affero General Public License v3.0 协议授权。&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;</description><category>Elasticsearch</category><category>full-text search</category><category>Mastodon</category><guid>https://blog.bgme.me/posts/2019/open-full-text-search-for-mastodon/</guid><pubDate>Fri, 15 Feb 2019 15:03:27 GMT</pubDate></item></channel></rss>