SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
社内ドキュメント検索システム構築のノウハウ
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

Weitere ähnliche Inhalte

Was ist angesagt?

LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 

Was ist angesagt? (20)

実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Redmineでメトリクスを見える化する方法
Redmineでメトリクスを見える化する方法Redmineでメトリクスを見える化する方法
Redmineでメトリクスを見える化する方法
 
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントVPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてAzure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
 

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

SyncThought/代表取締役社長 海野氏
SyncThought/代表取締役社長 海野氏SyncThought/代表取締役社長 海野氏
SyncThought/代表取締役社長 海野氏
loftwork
 
導入時に知っておきたいHtml5+css3の基本
導入時に知っておきたいHtml5+css3の基本導入時に知っておきたいHtml5+css3の基本
導入時に知っておきたいHtml5+css3の基本
Takeharu Baba
 
20110804 広報が考えるべきkgi、kpiとその施策 nims
20110804 広報が考えるべきkgi、kpiとその施策 nims20110804 広報が考えるべきkgi、kpiとその施策 nims
20110804 広報が考えるべきkgi、kpiとその施策 nims
loftwork
 
141027 シックスアパート様セミナー資料
141027 シックスアパート様セミナー資料141027 シックスアパート様セミナー資料
141027 シックスアパート様セミナー資料
Masaki Suzuki
 

Ähnlich wie 社内ドキュメント検索システム構築のノウハウ (20)

SyncThought/代表取締役社長 海野氏
SyncThought/代表取締役社長 海野氏SyncThought/代表取締役社長 海野氏
SyncThought/代表取締役社長 海野氏
 
Microsoft Search @O365JPFUK
Microsoft Search @O365JPFUKMicrosoft Search @O365JPFUK
Microsoft Search @O365JPFUK
 
オープンソースカンファレンスBi勉強会20141018
オープンソースカンファレンスBi勉強会20141018オープンソースカンファレンスBi勉強会20141018
オープンソースカンファレンスBi勉強会20141018
 
エッジヘビーコンピューティングと機械学習
エッジヘビーコンピューティングと機械学習エッジヘビーコンピューティングと機械学習
エッジヘビーコンピューティングと機械学習
 
DataEngConf NYC’18 セッションサマリー #1
DataEngConf NYC’18 セッションサマリー #1DataEngConf NYC’18 セッションサマリー #1
DataEngConf NYC’18 セッションサマリー #1
 
[Gree] DataEngConf NYC’18 セッションサマリー #1
[Gree] DataEngConf NYC’18 セッションサマリー #1[Gree] DataEngConf NYC’18 セッションサマリー #1
[Gree] DataEngConf NYC’18 セッションサマリー #1
 
シラサギ紹介20161119
シラサギ紹介20161119シラサギ紹介20161119
シラサギ紹介20161119
 
導入時に知っておきたいHtml5+css3の基本
導入時に知っておきたいHtml5+css3の基本導入時に知っておきたいHtml5+css3の基本
導入時に知っておきたいHtml5+css3の基本
 
Ai の最新動向と今熱い chat bot による業務効率化
Ai の最新動向と今熱い chat bot による業務効率化Ai の最新動向と今熱い chat bot による業務効率化
Ai の最新動向と今熱い chat bot による業務効率化
 
White paper ecommercesearch_japanto_psale30_interface
White paper ecommercesearch_japanto_psale30_interfaceWhite paper ecommercesearch_japanto_psale30_interface
White paper ecommercesearch_japanto_psale30_interface
 
システム高速化に使えるJSON関連ライブラリ
システム高速化に使えるJSON関連ライブラリシステム高速化に使えるJSON関連ライブラリ
システム高速化に使えるJSON関連ライブラリ
 
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
 
20110804 広報が考えるべきkgi、kpiとその施策 nims
20110804 広報が考えるべきkgi、kpiとその施策 nims20110804 広報が考えるべきkgi、kpiとその施策 nims
20110804 広報が考えるべきkgi、kpiとその施策 nims
 
Php on windows vol.2 - session.1 - 公開用
Php on windows   vol.2 - session.1 - 公開用Php on windows   vol.2 - session.1 - 公開用
Php on windows vol.2 - session.1 - 公開用
 
141027 シックスアパート様セミナー資料
141027 シックスアパート様セミナー資料141027 シックスアパート様セミナー資料
141027 シックスアパート様セミナー資料
 
Microsoft Search - Microsoft Graph connector と Search Federation の概要
Microsoft Search - Microsoft Graph connector と Search Federation の概要Microsoft Search - Microsoft Graph connector と Search Federation の概要
Microsoft Search - Microsoft Graph connector と Search Federation の概要
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search
 
Prd001 イノベーションを生み出す組織へ!
Prd001 イノベーションを生み出す組織へ!Prd001 イノベーションを生み出す組織へ!
Prd001 イノベーションを生み出す組織へ!
 
マルチクラウドで分析基盤を構築してみた Supership201612
マルチクラウドで分析基盤を構築してみた Supership201612マルチクラウドで分析基盤を構築してみた Supership201612
マルチクラウドで分析基盤を構築してみた Supership201612
 
オープンデータを利用した企業分析ツール"Buffett-Code"について
オープンデータを利用した企業分析ツール"Buffett-Code"についてオープンデータを利用した企業分析ツール"Buffett-Code"について
オープンデータを利用した企業分析ツール"Buffett-Code"について
 

Mehr von Shinsuke Sugaya

Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ Fess
Shinsuke Sugaya
 

Mehr von Shinsuke Sugaya (17)

LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画
 
PredictionIO構築入門
PredictionIO構築入門PredictionIO構築入門
PredictionIO構築入門
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
 
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFessElasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFess
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成
 
DBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessDBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFess
 
elasticsearchプラグイン入門
elasticsearchプラグイン入門elasticsearchプラグイン入門
elasticsearchプラグイン入門
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ Fess
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
オフィスに1台!全文検索Fess
オフィスに1台!全文検索Fessオフィスに1台!全文検索Fess
オフィスに1台!全文検索Fess
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

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

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