2018年1月28日日曜日

Fessを動かすサーバーの妥当なスペックは

おはようございます。Nyafooです。
今日はFessを動かすサーバーの目安を書きたいと思います。
僕はAWSを使っているので、AWSのインスタンスで書きます。

●巡回先が20から30サイトのFess
目安として、インデックスが数万件のFessです。
t2.mediumで一応動きます。
すぐにクレジットを使い切るので、巡回先のURLを正規表現で細かく指定する必要があります。
ストレージは数GBで収まるでしょう。

●巡回先が100サイトぐらいのFess
インデックスが10万件を超えるぐらいの規模感です。
m5.largeが1台でまかなえる範囲ですが、制限が増えてきます。
クローリングに掛かる時間が伸びるので、クロール中にメンテナスができなくなります。
FessやElasticsearch、Linuxの設定はデフォルトでも大丈夫でしょう。

●巡回先が1000サイトを超えるFess
インデックスが100万件を超える辺りです。
この辺りからクラスタ構成が必須になります。
Fess、Elasticsearch、Linuxはデフォルト設定で大丈夫でしょう。
まだインスタンスの力押しで行ける範囲でしょう。

●巡回先が1万サイトを超えるFess
インデックスが1000万件を超えます。
本格的なクラスタ構成が必要です。
Fess、Elasticsearch、Linuxもチューニングが必要です。
大規模クラスタ運営の知識を学び、ノードの通信を抑える必要があります。
インデックスは、何もしないと400GBを超えてきます。
インデックスの圧縮やバックアップ方法も考慮しなければなりません。

AWSはスケールさせるときに便利ですが、小規模だと割高になります。
インスタンス1台で運用するなら、国内のクラウドの方が安いかもしれません。
m5.largeのリザーブドインスタンスと比較して決めると良いと思います。

2018年1月20日土曜日

Fess 11.4.7がリリースされたので勝手に解説

Fess11系の新バージョンがリリースされました。
今回はバグフィックス中心のようです。

変更点を勝手に解説します。
※勝手に解説なので、あやふやなところがあります。

#1440
canonicalタグの処理の微調整。

#1437
webクローラーにDefaultLangageを設定可能に。
古いWebサイトだと、lang宣言していないところがあるので助かります。
fess_config.propertiesに、「crawler.document.html.default.lang=」が追加されました。

#1435
ScoreUpdaterが機能追加されました。
Google Analyticsの結果をスコアに反映するようです。

#1432
エラー表示のバグフィックスのようです。

#1431
デフォルト値の変更。

#1430
検索結果のスニペット(抜粋部)のデフォルト値の変更。
スニペットが短くなるようです。

#1425
APIの仕様変更のようですが、詳しいことはわかりませんでした(すいません

#1421
管理者がログを取得する機能のバグフィックスのようです。

#1412
fess-ss.jsからfunction文が取り除かれました。

2017年12月19日火曜日

FESSインデックスと圧縮

FESSのメインインデックスは、油断すると数百GBになってきます。
SSDを増やすにも限度があるので、圧縮することにしました。

fess.yyyymmddインデックスを新しく作るときに、"index"以下に下記の設定を加えました。

    "codec": "best_compression"

低速ですが高圧縮なアルゴリズムに切り替わります。

古いelasticsearchのドキュメントだと、「elasticsearch.ymlに記述する」と書いてありますが、今のelasticsearchではインデックスの設定で記述します。

staticな要素のため、インデックスの作成時か、クローズしたインデックスで指定しなさい、と公式ドキュメントにありますね。

僕は1か月ごとぐらいに_reindexで内容を詰めなおすので、新しく作ったfess.yyyymmddに指定しました。

2017年12月18日月曜日

サムネールを一度断念します

FESSにはサイトのサムネールを表示する機能があります。

サムネールはローカルのファイルシステム上に保存されますが、これが予想以上で…。
まず、サムネールの総容量が100GBを超えてきます。
それから、膨大な数のディレクトリと画像ファイルが生成されます。

サムネールなので「そういうもの」なのですが、今はWebインデックスに注力することにします。

1TBのSSDが楽々アサインできるぐらい儲かったら、再挑戦します。

2017年12月17日日曜日

勝手に解説:FESSの設定ファイル

あまりに情報が無いので、自分で調べた物を勝手に書くことにしました。

FESSの設定は、ローカルに保存されるものと、elasticsearch(以下es)に保存されるものがあります。

■esに保存されるもの

  • ユーザー情報とパスワード
  • Web、ファイルなどのクロール設定
  • 形態素解析の辞書設定
  • サジェスト設定

同じクラスタに参加しているFESSは、ユーザー情報を共有しています。
デフォルトのadminアカウントは、削除するか、すぐにパスワードを変更して、権限をGuestに落とすと良いでしょう。

以下はローカルに保存されるものです。

■メインの設定ファイル
/etc/fess/fess_config.properties
FESSのメイン部分です。

# JVM options
クローラーやSuggestインデクサの設定です。
通常なら変える必要はありません。
数千万URLをターゲットにするなら、クローラーの割り当てメモリを増やします。
「-Xmx512m\n\」の部分です。

# common
FESSの基本的な挙動を設定します。
特段、変える必要はないと思います。

# html
Webクローリングの挙動を設定します。
crawler.document.html.pruned.tags
で、無視するタグを追加できます。

# cache
キャッシュ機能の挙動を設定します。
crawler.document.cache.enabled=false
キャッシュ機能が不要なら、上をfalseにします。

# boost
検索結果の評価値を変更するときに使います。
デフォルトでまずまずの結果が返ってきます。

# search page
ここも特に変える必要が無いのですが、thumbnailsだけ気を付けます。
thumbnail.html.image.format=png
サムネールの画像フォーマットを指定します。
pngとjpgが指定できるのかな?調査中です。
thumbnail.crawler.enabled=false
サムネールが不要、または該当のサーバーで生成させないときはfalseにします。

#  Scheduler
scheduler.target.name=
複数のサーバーでFESSクラスタを作っているときに、クローラー名を設定できます。
node-0とかcrawler-0とか、管理しやすい名前を付けると良いでしょう。
FESSのUIの「システム」→「スケジューラー」で「対象」を指定できます。
デフォルトはallで、全てのクラスタでクローラーが動作します。
「Suggest Indexerはnode-2にやらせよう」みたいに、特定のノードに仕事をさせたいときは、上で設定したクローラー名を入力します。
複数のノードを指定するときはコンマで区切ります。

■クローラーの設定
/usr/share/fess/app/WEB-INF/crawler/resources/app.xml
中身はxmlです。
FESSは汎用検索エンジンのため、fileTypeHelperに大量のMIMEタイプが記述されています。
自分のシステムに不要な部分は、コメントアウトしても大丈夫です。

/usr/share/fess/app/WEB-INF/classes/crawler/contentlength.xml
クローラーで読み込む最大サイズを記述します。

■サムネールの保存先
/var/lib/fess/thumbnails/
サムネールは、サーバーのローカルに保存されます。
うっかり、大量のサムネールが生成されてストレージを圧迫することもあります。
ものすごい数のディレクトリが作成されるので、削除するときは大変です。

■ログの保存先
/var/log/fess/
ログは普通の場所に保存されます。

2017年12月16日土曜日

FESSのインデックスを勝手に分類する

FESSはオンラインの文献が少ないので、手探りで動かしています。
何回かシステムを吹き飛ばしながら、勝手にレベル分けしてみました。
勝手に書いているので、あとで怒られそうです(笑)

レプリカシャードを多重化すべきもの、二重化でよいもの、飛んだら作り直せばいいや、の3つに分けてみました。

■飛ばしてはいけないインデックス(多重化)

  • fess_log
  • .configsync
  • .fess_config
  • .fess_user


■飛んでもUIから復旧できるインデックス(二重化)

  • .suggest
  • .suggest_analyzer
  • .suggest_array
  • .suggest_badword
  • .suggest_elevate

■飛んでも再クロールで何とかなるインデックス
  • fess.yyyymmdd
  • .crawler
  • fess.suggest.yyyymmddhhmmss

特に「fess.suggest.yyyymmddhhmmss」は、Suggest Indexerが走るたびに生成されるので、使い捨てで構わないでしょう。
「.crawler」は使い捨てと言いづらいですが、数十万件のインデックスなら再巡回すればよいかと思います。

メインのインデックス「fess.yyyymmdd」は難しい所です。本当は多重化したいのですが、数百GBになるので、ストレージの確保が大変ですね。
僕は割り切って、「二重化+S3スナップショット」で運用しています。

elasticsearchベースのFESSは、最初に2基のクラスタで動かしておけば、容易に拡張できるようになっています。小さく始められるのがいいですね。

2017年12月15日金曜日

今週も終わりました。もうすぐ今年も終わりです

なんとか今週もつつがなく終えることができました。
思えば、旧Nyafoo!を作ったのが半年前。
ガタピシさせながらFESSを体当たりで動かして、数百GBのインデックスを安定して動かすコツがわかって来たように思います。

仕事を持ちながら、elasticsearchとFESSを学ぶ事になり、時間の確保に追われがちですが、楽しいと何とかなるものですね。

来年は「当たる」検索エンジンの開発を目指して頑張りたいと思います。

Fessを動かすサーバーの妥当なスペックは

おはようございます。Nyafooです。 今日はFessを動かすサーバーの目安を書きたいと思います。 僕はAWSを使っているので、AWSのインスタンスで書きます。 ●巡回先が20から30サイトのFess 目安として、インデックスが数万件のFessです。 t2.medi...