社内ドキュメント検索システム構築のノウハウ
Search Engineering Tech Talk 2019 Spring
Search Engineering Tech Talk 2019 Spring
■ 名前: 菅谷信介
■ 仕事
➔ 検索やAIに関する開発や技術コンサルティング
■ オープンソース活動
➔ Fess, Apache PredictionIO, DBFlute関連,...
■ IT Search+で連載中
➔ 「簡単導入! OSS全文検索サーバFess入門」
自己紹介
2
Search Engineering Tech Talk 2019 Spring
今回は
検索エンジンの中身的な話ではなく
企業内検索における検索システムの話
3
Search Engineering Tech Talk 2019 Spring
企業内検索とは
4
Search Engineering Tech Talk 2019 Spring
■ 企業内の様々な情報を検索するシステム
企業内検索(エンタープライズサーチ)
5
検索システム利用者
社内(外)サイト
業務システム
(クラウドサービスも含む)
検索 クロール
ファイルサーバ
複数のデータソースを対象として横断検索を実現する
Search Engineering Tech Talk 2019 Spring
Fessで学んだ
企業内検索を作るための話
6
Search Engineering Tech Talk 2019 Spring
Fessとは
7
Search Engineering Tech Talk 2019 Spring 8
Fessとは
■ オープンソースの全文検索システム
➔5分で構築できるくらい簡単に利用可能
■ Apacheライセンスで提供
■ Javaベースのアプリケーションサーバ
■ Elasticsearchを検索エンジンとして利用
■ 様々な検索シーンで利用可能
■ 現在の最新バージョンは12.6
➔今年で開発10年目!
https://fess.codelibs.org/
Search Engineering Tech Talk 2019 Spring 9
デモ環境: https://search.n2sm.co.jp/
検索画面
PC版 スマホ版
Search Engineering Tech Talk 2019 Spring 10
管理画面
adminユーザーでログイン
Search Engineering Tech Talk 2019 Spring 11
検索分野での立ち位置
検索関連の知識なくても利用可能(すぐに使える)
検索関連の知識が必要(開発が必要)
検索システム
➔ Fess、商用検索システム
検索サーバ+クローラ
➔ Hyper Estraier、Namazu、Nutchなど
検索サーバ
➔ Solr、Elasticsearch、groongaなど
検索ライブラリ
➔ Luceneなど
Search Engineering Tech Talk 2019 Spring
企業内検索を
構築するときの課題
12
Search Engineering Tech Talk 2019 Spring
■ クロール対象の大規模化
■ セキュア検索
■ シングルサインオン
■ 業務システムとの連携
■ ファイルの種類
よくでる課題
13
Search Engineering Tech Talk 2019 Spring
■ クロール対象のファイル数の増加
➔数千万ファイル以上の案件が増えた
■ クラスタにして分散検索
➔Elasticsearchで実現できる(運用ナレッジは必要)
➔できるだけ運用リスクを減らす
■ クロールする方法も工夫が必要
➔通常のファイルシステムのクロールでは無理
➔更新ファイルリストを生成しクロール
クロール対象の大規模化
14
Fess
データストアクロール
更新されたファイルの
ファイルパス一覧
ファイルサーバなど
更新されたファイルだけ
クロールする
Search Engineering Tech Talk 2019 Spring 15
セキュア検索(ロール検索)
■ 認証状態により検索結果を出し分ける
➔ログインしているユーザー情報を利用する
➔AD連携して認証情報を取得するなど
■ クロール時に権限情報を付加する
➔Sambaクロールの場合はファイルの権限を利用する
営業部
技術部
Fess
部門別や役職別に検索結果を
出し分けることが可能
営業資料
検索条件に
部署を追加
ドキュメントに
部署を追加
Search Engineering Tech Talk 2019 Spring
■ 検索システムにも自動でログインする
➔Windows統合認証
➔リバースプロキシ型認証
➔OpenID Connectなど
■ Active DirectoryだとWindows統合認証
➔今後はAzureADでOpenID Connectと増えるかも
シングルサイオン
16
利用者 Fess認証サーバ
利用者 Fess認証サーバ
Windows統合認証
OpenID Connect
リバースプロキシ型
Search Engineering Tech Talk 2019 Spring
■ いろいろな業務システムがある
■ とはいえ、データはデータベースにある
➔SQLで取得してインデックスすれば良い
➔JDBCドライバがあればだいたい何とかなる
業務システムとの連携
17
Fess
データストアクロール DBサーバ
SQLのSELECT文
1行1ドキュメントとして
加工してインデックスする
Search Engineering Tech Talk 2019 Spring
■ 検索するためにはテキスト化が必要
■ MS Office: POI
■ PDF: PDFBox
■ DocuWork: IFilter or xdw2text
■ 一太郎: IFilter (消えつつある気がする…)
■ AutoCAD: libdxfrw
■ その他もろもろ: Tika
➔Tikaはいろいろなことをいい感じにテキスト化する
➔場合によっては微調整は必要
ファイルの種類
18
Search Engineering Tech Talk 2019 Spring
その他の細々とした課題
19
Search Engineering Tech Talk 2019 Spring 20
■ http://〜の検索結果ページでfile://〜のリンクが機
能しない
➔セキュリティポリシーの設定で有効な場合もある?
■ 対応方法としては…
➔WebDAVでhttp://〜等でアクセス可能にする
➔Fessではプロキシとして対象ファイルを返却
file://〜問題
Search Engineering Tech Talk 2019 Spring 21
■ zipファイル爆弾
➔展開すると数Gのファイルになる
➔展開時には展開後のサイズの考慮が必要
➔Tikaは対策をしている
■ excelファイル爆弾
➔何でもExcelにコピペする人がいる…
➔無駄な単語が膨大にあり、Analyzerで高負荷に…
➔Fessは単語の切り捨てや重複除去対応での対策
〜爆弾ファイル
Search Engineering Tech Talk 2019 Spring 22
■ PDFのフォーマットにも複数のバージョン
■ テキスト抽出ならJavaだとPDFBoxとか
■ PDFBoxは古いバージョンで文字化けする
➔古いバージョンなので気にする必要はない
■ その他ではOCRのPDFとかの場合
➔無駄なスペースが入るので、独別な処理が必要
PDF文字化け
Search Engineering Tech Talk 2019 Spring 23
■ クリック数やLike数をドキュメントに保持する
■ クリック数は検索結果クリック時に集計
➔リンクを書き換えてリダイレクト
■ 検索状況を集計してレポートする
■ Function Score Queryでスコアに反映する
検索の集計や反映
利用者
Fess
検索結果を表示
検索結果をクリック
検索結果へリダイレクト
検索結果のサイト
ここでクリック情報を取得
Search Engineering Tech Talk 2019 Spring 24
■ Google Search Applianceが保有する機能なので
普通に要求される場合が多い
■ Analyzerで同義語辞書で対応可能な場合もある
➔リアルタイムな反映が求められると☓
■ 特定のクエリーのときに登録語を展開する
➔Fessでは実装済み
➔関連コンテンツ的な機能もあったり…
関連クエリー(同義語)
Search Engineering Tech Talk 2019 Spring 25
■ クロールとは別に画像生成処理を実行
■ HTMLであればページ内で指定された画像
➔metaタグのthumbnailかog:imageなど
➔ページ内のimgタグで正方形に近い画像など
➔PhantomJSなどでがんばる必要はない
■ PDFであればImageMagickのconvertコマンド
■ MS Officeはunoconvとconvertの合せ技
サムネイル画像の表示
Search Engineering Tech Talk 2019 Spring
まとめ
26
Search Engineering Tech Talk 2019 Spring
■ 企業内検索を作る際にはいろいろと課題がある
■ 今後はクラウドの対象も増えそう
■ Fessは数々の課題を乗り越えてきた!
➔ 何か作るならFessをベースに考えると良いはず
まとめ
27

社内ドキュメント検索システム構築のノウハウ

  • 1.
  • 2.
    Search Engineering TechTalk 2019 Spring ■ 名前: 菅谷信介 ■ 仕事 ➔ 検索やAIに関する開発や技術コンサルティング ■ オープンソース活動 ➔ Fess, Apache PredictionIO, DBFlute関連,... ■ IT Search+で連載中 ➔ 「簡単導入! OSS全文検索サーバFess入門」 自己紹介 2
  • 3.
    Search Engineering TechTalk 2019 Spring 今回は 検索エンジンの中身的な話ではなく 企業内検索における検索システムの話 3
  • 4.
    Search Engineering TechTalk 2019 Spring 企業内検索とは 4
  • 5.
    Search Engineering TechTalk 2019 Spring ■ 企業内の様々な情報を検索するシステム 企業内検索(エンタープライズサーチ) 5 検索システム利用者 社内(外)サイト 業務システム (クラウドサービスも含む) 検索 クロール ファイルサーバ 複数のデータソースを対象として横断検索を実現する
  • 6.
    Search Engineering TechTalk 2019 Spring Fessで学んだ 企業内検索を作るための話 6
  • 7.
    Search Engineering TechTalk 2019 Spring Fessとは 7
  • 8.
    Search Engineering TechTalk 2019 Spring 8 Fessとは ■ オープンソースの全文検索システム ➔5分で構築できるくらい簡単に利用可能 ■ Apacheライセンスで提供 ■ Javaベースのアプリケーションサーバ ■ Elasticsearchを検索エンジンとして利用 ■ 様々な検索シーンで利用可能 ■ 現在の最新バージョンは12.6 ➔今年で開発10年目! https://fess.codelibs.org/
  • 9.
    Search Engineering TechTalk 2019 Spring 9 デモ環境: https://search.n2sm.co.jp/ 検索画面 PC版 スマホ版
  • 10.
    Search Engineering TechTalk 2019 Spring 10 管理画面 adminユーザーでログイン
  • 11.
    Search Engineering TechTalk 2019 Spring 11 検索分野での立ち位置 検索関連の知識なくても利用可能(すぐに使える) 検索関連の知識が必要(開発が必要) 検索システム ➔ Fess、商用検索システム 検索サーバ+クローラ ➔ Hyper Estraier、Namazu、Nutchなど 検索サーバ ➔ Solr、Elasticsearch、groongaなど 検索ライブラリ ➔ Luceneなど
  • 12.
    Search Engineering TechTalk 2019 Spring 企業内検索を 構築するときの課題 12
  • 13.
    Search Engineering TechTalk 2019 Spring ■ クロール対象の大規模化 ■ セキュア検索 ■ シングルサインオン ■ 業務システムとの連携 ■ ファイルの種類 よくでる課題 13
  • 14.
    Search Engineering TechTalk 2019 Spring ■ クロール対象のファイル数の増加 ➔数千万ファイル以上の案件が増えた ■ クラスタにして分散検索 ➔Elasticsearchで実現できる(運用ナレッジは必要) ➔できるだけ運用リスクを減らす ■ クロールする方法も工夫が必要 ➔通常のファイルシステムのクロールでは無理 ➔更新ファイルリストを生成しクロール クロール対象の大規模化 14 Fess データストアクロール 更新されたファイルの ファイルパス一覧 ファイルサーバなど 更新されたファイルだけ クロールする
  • 15.
    Search Engineering TechTalk 2019 Spring 15 セキュア検索(ロール検索) ■ 認証状態により検索結果を出し分ける ➔ログインしているユーザー情報を利用する ➔AD連携して認証情報を取得するなど ■ クロール時に権限情報を付加する ➔Sambaクロールの場合はファイルの権限を利用する 営業部 技術部 Fess 部門別や役職別に検索結果を 出し分けることが可能 営業資料 検索条件に 部署を追加 ドキュメントに 部署を追加
  • 16.
    Search Engineering TechTalk 2019 Spring ■ 検索システムにも自動でログインする ➔Windows統合認証 ➔リバースプロキシ型認証 ➔OpenID Connectなど ■ Active DirectoryだとWindows統合認証 ➔今後はAzureADでOpenID Connectと増えるかも シングルサイオン 16 利用者 Fess認証サーバ 利用者 Fess認証サーバ Windows統合認証 OpenID Connect リバースプロキシ型
  • 17.
    Search Engineering TechTalk 2019 Spring ■ いろいろな業務システムがある ■ とはいえ、データはデータベースにある ➔SQLで取得してインデックスすれば良い ➔JDBCドライバがあればだいたい何とかなる 業務システムとの連携 17 Fess データストアクロール DBサーバ SQLのSELECT文 1行1ドキュメントとして 加工してインデックスする
  • 18.
    Search Engineering TechTalk 2019 Spring ■ 検索するためにはテキスト化が必要 ■ MS Office: POI ■ PDF: PDFBox ■ DocuWork: IFilter or xdw2text ■ 一太郎: IFilter (消えつつある気がする…) ■ AutoCAD: libdxfrw ■ その他もろもろ: Tika ➔Tikaはいろいろなことをいい感じにテキスト化する ➔場合によっては微調整は必要 ファイルの種類 18
  • 19.
    Search Engineering TechTalk 2019 Spring その他の細々とした課題 19
  • 20.
    Search Engineering TechTalk 2019 Spring 20 ■ http://〜の検索結果ページでfile://〜のリンクが機 能しない ➔セキュリティポリシーの設定で有効な場合もある? ■ 対応方法としては… ➔WebDAVでhttp://〜等でアクセス可能にする ➔Fessではプロキシとして対象ファイルを返却 file://〜問題
  • 21.
    Search Engineering TechTalk 2019 Spring 21 ■ zipファイル爆弾 ➔展開すると数Gのファイルになる ➔展開時には展開後のサイズの考慮が必要 ➔Tikaは対策をしている ■ excelファイル爆弾 ➔何でもExcelにコピペする人がいる… ➔無駄な単語が膨大にあり、Analyzerで高負荷に… ➔Fessは単語の切り捨てや重複除去対応での対策 〜爆弾ファイル
  • 22.
    Search Engineering TechTalk 2019 Spring 22 ■ PDFのフォーマットにも複数のバージョン ■ テキスト抽出ならJavaだとPDFBoxとか ■ PDFBoxは古いバージョンで文字化けする ➔古いバージョンなので気にする必要はない ■ その他ではOCRのPDFとかの場合 ➔無駄なスペースが入るので、独別な処理が必要 PDF文字化け
  • 23.
    Search Engineering TechTalk 2019 Spring 23 ■ クリック数やLike数をドキュメントに保持する ■ クリック数は検索結果クリック時に集計 ➔リンクを書き換えてリダイレクト ■ 検索状況を集計してレポートする ■ Function Score Queryでスコアに反映する 検索の集計や反映 利用者 Fess 検索結果を表示 検索結果をクリック 検索結果へリダイレクト 検索結果のサイト ここでクリック情報を取得
  • 24.
    Search Engineering TechTalk 2019 Spring 24 ■ Google Search Applianceが保有する機能なので 普通に要求される場合が多い ■ Analyzerで同義語辞書で対応可能な場合もある ➔リアルタイムな反映が求められると☓ ■ 特定のクエリーのときに登録語を展開する ➔Fessでは実装済み ➔関連コンテンツ的な機能もあったり… 関連クエリー(同義語)
  • 25.
    Search Engineering TechTalk 2019 Spring 25 ■ クロールとは別に画像生成処理を実行 ■ HTMLであればページ内で指定された画像 ➔metaタグのthumbnailかog:imageなど ➔ページ内のimgタグで正方形に近い画像など ➔PhantomJSなどでがんばる必要はない ■ PDFであればImageMagickのconvertコマンド ■ MS Officeはunoconvとconvertの合せ技 サムネイル画像の表示
  • 26.
    Search Engineering TechTalk 2019 Spring まとめ 26
  • 27.
    Search Engineering TechTalk 2019 Spring ■ 企業内検索を作る際にはいろいろと課題がある ■ 今後はクラウドの対象も増えそう ■ Fessは数々の課題を乗り越えてきた! ➔ 何か作るならFessをベースに考えると良いはず まとめ 27