この記事では、全文検索サーバー Fessを利用してOneDrive内のファイルを横断検索する方法を紹介します。
これはFess上で実際に検索を行っている画面のスクリーンショットです。
なお、この機能の利用には一般法人向けのOffice365が必要となります。
導入手順
FessでOneDriveを横断検索するための手順を説明します。
導入の流れは次のようになります。
- プラグイン追加
- Fessの起動
- 認証設定
- Fessの設定・クローラ実行
1. プラグイン追加
Fessの現バージョン(12.4.0)には、デフォルトでは含まれていない機能であるため、自分で追加する必要があります。
ここからfess-ds-office365-12.2.0.jarをダウンロードします。
ダウンロードしたjarファイルは$FESS_HOME/app/WEB-INF/lib/
に配置します。
2. Fessの起動
このページを参考にFessを起動します。
3. 認証設定
データを取得するためには、認証情報をパラメータとして与える必要があります。
3-1. Azure Active Directory 利用
Office 365 で無料の Azure Active Directory サブスクリプションを使用する
を参考にAzure ADの利用を開始します。
この際、ディレクトリID(tenant
)を記録しておきます。
3-2. アプリケーション作成
My Applicationを開き、アプリの追加をします。
作成後、アプリケーションID(client_id
)を記録しておきます。
次に、アプリケーション シークレットから新しいパスワードを生成し、それ(client_secret
)を記録しておきます。
プラットフォームの追加でネイティブアプリケーションを追加します。
次に、アプリケーションのアクセス許可を変更します。
今回は「Directory.Read.All」「Files.Read.All」「Group.Read.All」「Notes.Read.All」「Sites.Read.All」「User.Read.All」を追加します。
ここまで終わったらアプリケーションを保存します。
次に、
https://login.microsoftonline.com/${tenant}/adminconsent?client_id=${client_id}&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient
を管理者権限のあるアカウントで開きます。
URLが、https://login.microsoftonline.com/common/oauth2/nativeclient?admin_consent=True&tenant=${tenant}
に変わったら大丈夫です。
3-3. LDAP認証の設定
Office365にはユーザーやグループごとにドライブがあり、ユーザーによってアクセス可能なリソースが異なります。
検索結果にアクセス不可能なりソースを表示させないために、LDAP認証の設定を行います。
Azure AD Domain Services のマネージド ドメインに対するセキュリティで保護された LDAP (LDAPS) の構成を参考にAzure ADのLDAPSを有効にします。
LDAPSが有効になったら、Secure LDAP外部IPアドレス または バインドされているカスタムドメイン (server_name
)を記録しておきます。
また、Office365にはディレクトリ全体で共有されるドライブがありますが、「ディレクトリ全体」を示すグループはデフォルトでは無いため、そこにアクセス可能なグループを作る必要があります。
Azure AD Premium ライセンスがある場合、
Azure Portalで[Azure Active Directory] > [グループ] > [全般]
を開き、ディレクトリ内の"すべてのユーザー"グループを有効にすると、All Usersというグループが作成されます。
ライセンスがない場合、
[Azure Active Directory] > [グループ] > [新しいグループ]
を開き、検索を許可したいユーザーを含むセキュリティグループを作成します。
この場合、ディレクトリに新しくユーザーが追加された時に、自動的に追加は出来ないので注意が必要です。
ライセンスの有無に関わらず作成したグループ名を記録しておきます。
4. Fessの設定・クローラ実行
OneDriveをクロールするための設定をします。
公式ドキュメントの全般#LDAP、データストアクロールも参考にしてください。
4-1. LDAP設定
LDAPを利用する場合、設定が必要です。
Fessの管理画面を開き、[システム] > [全般]
と移動します。
LDAP URLは3-3で記録したアドレスをserver_name
として、ldaps://${server_name}:636/
といった形式で入力します。
Base DNはexample.comの場合OU=AADDC Users,DC=example,DC=com
のような形式で入力します。
Bind DNとパスワードはAzure ADで管理者権限があるアカウントを指定します。
User DNは%s
、
アカウントフィルタは(&(objectClass=user)(userPrincipalName=%s))
、
グループフィルタは空欄、
memberOf属性はmemberOf
という感じで入力します。
この設定後、Azure ADのアカウントでログイン出来れば設定完了です。
4-2. クローラの設定
Fessの管理画面を開き、[クローラ] > [データストア]
と移動し、新規作成をします。
新規作成画面では、
- 名前
- ハンドラ
- パラメータ
- スクリプト
の4項目を設定して、作成を完了します。
「名前」には好きな文字列を入力してください。
「ハンドラ」はOneDrive
を選択してください。
「パラメータ」は次のようなフォーマットで入力してください。
tenant=********-****-****-****-************
client_id=********-****-****-****-************
client_secret=***********************
キーと値は3. で記録したものと対応しています。
「スクリプト」は次のようなフォーマットで入力してください。
title=files.name
content=files.description + "\n" + files.contents
mimetype=files.mimetype
created=files.created
last_modified=files.last_modified
url=files.web_url
role=files.roles
「パーミッション」はディレクトリ全体で共有されているドライブにアクセス可能なユーザー、グループを指定します。
3-3. で作成したグループAll Users
の場合、{group}All Users
という感じで入力します。
取得出来る値のキーと値の説明は次のようになります。
ここで言う「File」はOneDriveの1ファイルを指しています。
キー | 値 |
---|---|
files.name | Fileの名前 |
files.description | Fileの説明 |
files.contents | Fileの中身(テキスト) |
files.mimetype | FileのMIMEタイプ |
files.created | Fileの作成日時 |
files.last_modified | Fileの最終編集日時 |
files.web_url | FileをWeb上で閲覧するリンク |
files.roles | Fileにアクセス可能なrole |
OneNoteのクロール
Office365にはOneNoteが含まれていて、それもクロールすることが可能になっています。
OneNoteのクロールをする場合、
「バンドラ」はOneNote
、
「スクリプト」は次のようなフォーマットで入力します。
title=notebooks.name
content=notebooks.contents
created=notebooks.created
last_modified=notebooks.last_modified
url=notebooks.web_url
role=notebooks.roles
取得出来る値のキーと値の説明は次のようになります。
ここで言う「Notebook」はOneNoteの1ノートブックを指しています。
キー | 値 |
---|---|
notebooks.name | Notebookの名前 |
notebooks.contents | Notebookの中身(テキスト) |
notebooks.created | Notebookの作成日時 |
notebooks.last_modified | Notebookの最終編集日時 |
notebooks.web_url | NotebookをWeb上で閲覧するリンク |
notebooks.roles | Notebookにアクセス可能なrole |
4-3. ジョブスケジューラの作成
4-2で作成したクロールをクリックすると、クロール設定が開き、そこから「新しいジョブの作成」をします。
後からでも変更はできるので、とりあえず試す場合はそのままの設定で大丈夫です。
詳しいジョブスケジューラの設定については、このページを参考にしてください。
4-4. クローラの実行
[システム] > [スケジューラ]
と移動し、4-3で作成したジョブを開きます。
その画面から、「今すぐ開始」をします。
状態が「実行中」から「有効」になるまで待ちます。
4-5. 検索のテスト
検索フォームから適当に検索してみます。
この時、他の人のドライブのファイルが検索結果に表示されないことを確認します。