Skip to content

InstanceWithElasticsearch

Daigo 3 Dango edited this page Feb 18, 2018 · 15 revisions

Bonsai Elasticsearchを使う場合

https://elements.heroku.com/addons/bonsai

.profileでadd-onのconfig varをMastodonの環境変数にします。

# Obtain info from BONSAI_URL for Bonsai Elasticsearch
if [ -n "$BONSAI_URL" ]; then
	export ES_HOST=$BONSAI_URL
	export ES_PREFIX=
	export ES_PORT=
fi

Add-onの生成とインデックスの作成

$ heroku addons:create bonsai -a $APP_NAME
$ heroku run:detached rails chewy:deploy -a $APP_NAME
$ heroku logs -t -a $APP_NAME | grep run.
Default type scope order, limit and offset are ignored and will be nullified
Resetting StatusesIndex

20分くらいで下記のエラーになりました。

  :
rails aborted!
Elasticsearch::Transport::Transport::Errors::Forbidden: [403] {"code":403,"message":"Updates to this cluster have been disabled. Please contact support@bonsai.io for further details."}

当ぼっちインスタンスのトゥート数は無償プランには入りきなかったようです。

うまくいった場合には下記のように全文検索を有効にします。

$ heroku config:set ES_ENABLED=true -a $APP_NAME

Searchbox Elasticsearchを使う場合

https://elements.heroku.com/addons/searchbox

.profileでadd-onのconfig varをMastodonの環境変数にします。

# Obtain info from SEARCHBOX_SSL_URL for Searchbox Elasticsearch
if [ -n "$SEARCHBOX_SSL_URL" ]; then
  export ES_HOST=$SEARCHBOX_SSL_URL
  export ES_PREFIX=
  export ES_PORT=
fi

日本語を検索対象にできるよう、app/chewy/statuses_index.rbの冒頭部分を下記のように変更して、トークナイザーにKuromojiを使うようにします。ついでにicu_normalizerで規格化をするようにもしてみました (参考: Elasticsearch 日本語形態素解析のための文字列正規化の重要性):

class StatusesIndex < Chewy::Index
  settings index: { refresh_interval: '15m' }, analysis: {
    filter: {
      english_stop: {
        type: 'stop',
        stopwords: '_english_',
      },
      english_stemmer: {
        type: 'stemmer',
        language: 'english',
      },
      english_possessive_stemmer: {
        type: 'stemmer',
        language: 'possessive_english',
      },
    },
    analyzer: {
      content: {
        tokenizer: 'kuromoji_tokenizer',
        char_filter: %w(
          icu_normalizer
        ),
        filter: %w(
          english_possessive_stemmer
          asciifolding
          english_stop
          english_stemmer
        ),
      },
    },
  }

Add-onの生成とインデックスの作成

$ heroku addons:create searchbox:starter -a $APP_NAME
$ heroku run:detached rails chewy:deploy -a $APP_NAME
$ heroku logs -t -a $APP_NAME | grep run.

5分くらいで下記のエラーになりました。

  :
rails aborted!
Elasticsearch::Transport::Transport::ServerError: [429] {"error_id":"f0836083-4465-4a48-aa18-138786910b79","errors":[{"code":99701,"message":"You have reached your maximum storage size, upgrade your plan for more storage"}]}

当ぼっちインスタンスのトゥート数は無償プランには入りきなかったようです。Microプラン($9/月)だとどうだろう?

$ heroku addons:create searchbox:micro -a $APP_NAME
$ heroku run:detached rails chewy:deploy -a $APP_NAME
$ heroku logs -t -a $APP_NAME | grep run.

25分くらいで最初のインデックスが終わったようです。入りきったかな?

うまくいった場合には下記のように全文検索を有効にします。

$ heroku config:set ES_ENABLED=true -a $APP_NAME