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

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)