🔍

DockerでWebやローカルPC内の全文検索サーバーを導入する(fess)

2024/01/01に公開

はじめに

Dockerを使って、ローカルPC内やWebの全文検索ができるサーバーを構築します。
fessというサービスを使用します。

Docker Desktopがインストールされていることを前提とします。
下のリンクでDocker Desktopのインストール方法を記載しています。
https://zenn.dev/isi00141/articles/ccc00e2cd762df

また、以下の環境でインストールしました。
以下の環境で実行しました。

CPU intel 第12世代 Core i5
OS Windows 11 Home
メモリ 16GB

インストール方法

yamlファイルの準備

fessをインストールするための場所(ディレクトリ)を作成します。
ここではd:\fessフォルダを作成します。
d:\fessフォルダ内に、以下の2つのファイル「compose.yaml」 と「compose-opensearch2.yaml」を作成します。

compose.yaml
services:
  fess01:
    image: ghcr.io/codelibs/fess:14.11.1
    # build: ./playwright # use Playwright
    container_name: fess01
    environment:
      - "SEARCH_ENGINE_HTTP_URL=http://es01:9200"
      - "FESS_DICTIONARY_PATH=${FESS_DICTIONARY_PATH:-/usr/share/opensearch/config/dictionary/}"
      # - "FESS_PLUGINS=fess-webapp-semantic-search:14.11.0 fess-ds-wikipedia:14.11.0"
    ports:
      - "8080:8080"
    networks:
      - esnet
    depends_on:
      - es01
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    restart: unless-stopped

networks:
  esnet:
    driver: bridge
compose-opensearch2.yaml
services:
  es01:
    image: ghcr.io/codelibs/fess-opensearch:2.11.1
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es01
      - cluster.initial_cluster_manager_nodes=es01
      - cluster.name=fess-es
      - bootstrap.memory_lock=true
      - node.roles=cluster_manager,data,ingest,ml
      - plugins.security.disabled=true
      - "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
      - "FESS_DICTIONARY_PATH=/usr/share/opensearch/config/dictionary"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65535
        hard: 65535
    volumes:
      - esdata01:/usr/share/opensearch/data
      - esdictionary01:/usr/share/opensearch/config/dictionary
    ports:
      - 9200:9200
    networks:
      - esnet
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    restart: unless-stopped

volumes:
  esdata01:
    driver: local
  esdictionary01:
    driver: local

.wslconfig ファイルの設定変更

メモリを大量に使用するコンテナを動かす場合はメモリの割当を増やす必要があり、wslのコンフィグファイルに直接記載する必要があります。
「C:\Users\【ユーザ名】\.wslconfig」ファイルを新しく作成し、

.wslcomfig
[wsl2]
kernelCommandLine = sysctl.vm.max_map_count=262144

の記述を追加します。(すでに.wslconfigファイルがある場合はkernelCommandLine~の行を追記します。)

.wslconfig ファイルを変更したら一度PCを再起動します。

Fessの起動

Fessをdocker composeコマンドで起動します。

コマンドプロンプトを開き、compose.yamlファイルがあるフォルダー(ここではd:\fess)に移動して、以下のコマンドを実行します。

コマンドプロンプト
docker compose -f compose.yaml -f compose-opensearch2.yaml up -d

動作確認

http://localhost:8080/ にアクセスすることで、起動を確認できます。

管理用のUIは、 http://localhost:8080/admin/ です。 デフォルトの管理者アカウントのユーザー名とパスワードは、「admin/admin」になります。

Fessの終了

Fessの終了は、Fessを起動したフォルダーで、以下のコマンドを実行します。

コマンドプロンプト
docker compose -f compose.yaml -f compose-opensearch2.yaml down

fessの設定例

ここでは設定例として、Webサイトのクロール(ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラムのこと)設定を行います。

Webサイトのクローリング設定

左のメニューからクローラー→ウェブと移動します。

新規作成を選択し、名前、検索したいwebサイト名を入力し、作成ボタンを選択します。今回はyahooのサイト内を検索します。

入力が終わったら、画面下の「作成」をクリックします。

インデックスの作成

次に、検索用のインデックスを作成します。

左のメニューから、システム→スケジューラと移動します。

ここでは、クローラーのタイミングや指定などの設定を行うことができます。今回はDefault Crawlerを利用します。Default Crawlerは、全てのクローラを起動させることができます。
Default Crawlerを選択し、「今すぐ開始」を選択します。

クローリングが始まると、左メニューのシステム情報→クロール情報内に新しい項目ができています。

新しくできた項目を選択し、以下のような情報が表示されていればクロール成功です。

検索

画面左上の検索画面ボタンを選択すると、検索フォーム画面が表示されます。単語を入れて検索すると、検索結果が表示されます。

※検索結果がうまく出なかった場合は、クロール情報のインデックスのサイズを確認してください。ここが0件の場合、クローラの設定で失敗しています。設定の見直しが必要です。

Discussion