メインコンテンツまでスキップ

Blog 記事の 全文検索 導入: Elasticsearch + FESS (解説を補足)

· 約6分
gh_20250809_fess_fig2.jpg

(作図: ChatGPT 5)

履歴

2025-08-10 冒頭の図解を変更。AI による解説を追加。

2025-08-09 作成

前置き​

従来、過去記事の検索には自作の検索ツール(記事データベースに GUI の検索欄を被せたもの)を用いてきたが、時代遅れの感が否めない。そこで Elasticsearch + FESS を導入して Blog 記事の全文検索を Local PC で行えるようにした。

週末の余暇時間を使ってあれこれ調べ、数時間かかったが、思ったより順調に実現できた。正式版の Elasticsearch は認証が ウザいので、同機能で OSS 版の OpenSearch にした。Docker 版もあるが、手間が増えるので Docker には載せていない。

目次​

  1. 前置き
  2. 結果
  3. Version の詳細
  4. 残件
  5. AI による解説
    1. 処理の流れ

結果​

去年の 6月から GitHub を本拠地に替えて、記事を公開しているが、既に GitHub だけで 1600件以上の記事になっている。それを全て全文検索に乗せた。この件数なら数分で検索用の index が完成する。検索結果の具体例が下。30 msec で検索結果が表示されている。

gh_20250809_fess_screen.jpg

Version の詳細​

それぞれ以下のバージョンを用いた。

  • FESS-15.1.0
  • opensearch-3.1.0-windows-x64
  • OpenJDK21U-jdk_x64_windows_hotspot_21.0.8_9

残件​

去年の 6月以前の FC2Blog の全記事も FESS の全文検索に載せたいが…当分は無理。


AI による解説​

Elasticsearch/OpenSearchとFess、そしてWebデータやPC内部ファイルの間の関係と処理の流れを図解します。

この構成では、‌‌Fessがクローラーとフロントエンドの役割を担い、Elasticsearch/OpenSearchがバックエンドの検索エンジンとして機能します。‌‌


処理の流れ​

gh_20250809_fess_fig2.jpg
  1. ‌‌データの収集 (Fess)‌‌

    • ‌‌クローラーの実行‌‌: Fessは、設定されたスケジュールに従い、クローラーを実行します。
    • ‌‌Webデータ‌‌: ウェブサイトのURLを登録すると、Fessはページを巡回し、HTMLコンテンツを取得します。
    • ‌‌PC内部ファイル‌‌: ファイルシステムクローラーを設定すると、Fessは指定されたフォルダ内のファイル(PDF, Word, Excelなど)を巡回し、内容を読み取ります。
  2. ‌‌インデックスの作成 (Fess -> Elasticsearch/OpenSearch)‌‌

    • ‌‌データの整形‌‌: Fessは収集したデータから、タイトル、本文、URL、最終更新日などの情報を抽出します。
    • ‌‌インデックスへの登録‌‌: 抽出したデータをElasticsearch/OpenSearchに送信します。この際、日本語の全文検索を可能にするために、日本語形態素解析プラグイン(SudachiKuromojiなど)が有効な状態でデータが登録されます。
    • ‌‌検索インデックスの構築‌‌: Elasticsearch/OpenSearchは受け取ったデータを基に、高速な検索を可能にするための「検索インデックス」を構築します。
  3. ‌‌検索の実行 (ユーザー -> Fess -> Elasticsearch/OpenSearch)‌‌

    • ‌‌ユーザーからの検索‌‌: ユーザーがWebブラウザでFessの検索画面にアクセスし、キーワードを入力して検索を実行します。
    • ‌‌検索リクエストの送信‌‌: Fessはユーザーからのリクエストを受け取り、Elasticsearch/OpenSearchに検索クエリとして送信します。
    • ‌‌検索結果の取得‌‌: Elasticsearch/OpenSearchはインデックスを高速に検索し、関連性の高いドキュメントのIDやスコアをFessに返します。
  4. ‌‌検索結果の表示 (Fess)‌‌

    • ‌‌結果の整形‌‌: FessはElasticsearch/OpenSearchから受け取った結果をもとに、タイトルやスニペット(抜粋)、URLなどを整形します。
    • ‌‌Webページでの表示‌‌: Fessは整形した検索結果を、ユーザーが見やすい形でWebページ上に表示します。

このように、Fessはデータの収集からユーザーへの検索結果表示までを一手に担い、Elasticsearch/OpenSearchはデータの保存と高速な検索処理に特化して連携することで、高機能な全文検索システムが構築されます。

(2025-08-10)