Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,977 views

Published on

企業内検索システムを作る際に遭遇するような課題を紹介します。

Published in: Technology
  • Be the first to comment

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

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

×