今回はFessのサジェスト機能の使い方と、既存のサイトに設置したFessの検索フォームにサジェストを表示させる方法について紹介しましょう。なお、Fessのバージョンは、Fess-13.6.0を利用します。必要に応じて、公式サイトから入手してください。

サジェスト候補の生成方法

一般的な検索サービスにおいて、「サジェスト」とは予測変換を意味します。Fessのサジェスト機能では、検索窓に調べたいキーワードを入力する際に、入力中のキーワードを補完する候補(サジェスト候補)を表示します。また、そのキーワードに付随してよく調べられる検索語があれば、それも同時に表示し、より適切な絞り込み検索をサポートします。

サジェストの例

Fessでサジェスト候補を生成する方法には、以下の2種類があります。

  • インデックスされたドキュメントから生成
  • 検索ログから生成

以降では、それぞれの方法について説明します。

インデックスされたドキュメントから生成

この方法では、インデックスされたドキュメントに含まれている単語を基にサジェスト候補を生成します。まずは、通常通りにインデックスを作成してください。

Fessの起動後、管理画面にログインし、「クローラ」>「ウェブ」を開きます。今回は以下の設定値でクロール設定を作成します。

項目名 設定値
名前 Fess
URL  https://fess.codelibs.org/ja/
クロール対象するURL https://fess.codelibs.org/ja/.*
最大アクセス数 100
スレッド数 2
間隔 10000

上記の設定で「作成」ボタンを押して設定を保存します。クロールの実行は「システム」>「スケジューラ」>「Default Crawler」で「今すぐ開始」を押下して開始します。

クロールが完了したら、サジェスト候補を生成します。

サジェストのジョブを実行する前に設定を確認しておきましょう。その際、「システム」>「全般」で「ドキュメントでサジェスト」が有効になっているかどうか確認してください。「有効」にチェックが入っていない場合は、チェックを入れて「更新」ボタンを押します。

設定を確認後、サジェストジョブを実行します。「システム」>「スケジューラ」の「Suggest Indexer」をクリックし、「今すぐ開始」を押下します。

サジェスト候補が生成されたかどうかは「サジェスト」>「サジェストワード」の「ドキュメント」の単語数で確認できます。

ドキュメントのサジェスト単語数

単語数が増加していることを確認できたら、検索窓に検索語を入れて検索してみましょう。検索語の候補が表示されていれば成功です。

検索ログから生成

検索ログからサジェスト候補を生成する場合、同じキーワードが複数回検索されると、そのキーワードがサジェスト候補の対象になります。

検索ログからサジェスト候補を生成するには「システム」>「全般」で「検索語でサジェスト」を有効にします。「有効」にチェックが入っていない場合は、チェックを入れて「更新」ボタンを押下してください。

これで検索ログからサジェスト候補が生成されるようになりますが、単純に同じキーワードで検索するだけではサジェスト候補の対象にはなりません。対象にするには、以下の条件で検索することが必要です。

  • HTTPのセッションが同一ではない
  • 同一キーワードで10回以上検索(連続して検索する場合は1分以上間隔を開けて検索してください)

検索ログから生成された単語数を確認するには「サジェスト」>「サジェストワード」の「検索語」の単語数で確認できます。

検索語のサジェスト単語数

複数回検索した検索語がサジェスト表示されていれば成功です。

サジェスト候補の削除

運用上、古いサジェスト候補を残しておきたくないこともあるでしょう。サジェスト候補を削除するには、以下の2つの方法があります。

有効日数を指定して削除

「システム」>「全般」の「以前のサジェスト情報を削除」で日数を指定して「更新」ボタンを押下します。サジェスト情報を削除したくない場合は「以前のサジェスト情報を削除」の日数を「-1」を指定してください。

一括削除

サジェスト候補を一括削除したい場合は、サジェスト画面で削除します。「サジェスト」>「サジェストワード」で削除したい単語種別の「削除」ボタンを押下します。

検索フォームでサジェスト表示

Fessでは、既存のサイトに検索フォームを配置して、Fessの検索結果に誘導することができます。このとき、配置した検索フォームにサジェスト機能を設定することができます。

まずは既存のサイトにFessの検索フォームを配置します。ページ内で検索フォームを置きたい箇所に以下のコードを配置してください。

<form id="searchForm" method="get" action="https://SERVERNAME/search/">
<input id="query" type="text" name="q" maxlength="1000" autocomplete="off">
<input type="submit" name="search" value="検索">
</form>

次にサジェストを表示させるため、以下のコードを「</body>」の前に追加してください。 こちらも同様に、「https://SERVERNAME」のURL部分は構築した FessサーバのURLに変更して利用してください。 既にサイトでjQueryを利用している場合はjQueryのscript要素は追加する必要はありません。

<script type="text/javascript" src="https://SERVERNAME/js/jquery-3.4.0.min.js"></script>
<script type="text/javascript" src="https://SERVERNAME/js/suggestor.js"></script>
<script>
$(function() {
  $('#query').suggestor({
    ajaxinfo : {
      url : 'https://SERVERNAME/suggest',
      fn : '_default,content,title',
      num : 10
    },
    boxCssInfo: {
      border: "1px solid rgba(82, 168, 236, 0.5)",
      "-webkit-box-shadow":
        "0 1px 1px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(82, 168, 236, 0.2)",
      "-moz-box-shadow":
        "0 1px 1px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(82, 168, 236, 0.2)",
      "box-shadow":
        "0 1px 1px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(82, 168, 236, 0.2)",
      "background-color": "#fff",
      "z-index": "10000"
    },
    minterm: 2,
    adjustWidthVal : 11,
    searchForm : $('#searchForm')
  });
});
</script>

サイトのデザインに合わせて、class属性でクラス名を追加するなど、CSSで必要に応じて調整してください。

では、配置した検索フォームで検索語を入力してみましょう。サジェスト表示されていれば成功です。

配置した検索フォームでサジェストを表示

* * *

今回は、サジェスト機能の使い方と、既存のサイトに設置したFessの検索フォームにサジェスト候補を表示させる方法を紹介しました。サジェスト機能は、より適切な検索結果への誘導効果も期待できるので、ぜひ利用してみてください。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。