SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
社内ドキュメント検索システム構築のノウハウ
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

Contenu connexe

Tendances

DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOpsMariOhbuchi
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境Shinsuke Sugaya
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
ニワトリでもわかるECS入門
ニワトリでもわかるECS入門ニワトリでもわかるECS入門
ニワトリでもわかるECS入門Yoshiki Kobayashi
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
Presto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon AthenaPresto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon AthenaAmazon Web Services Japan
 
MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理Takeshi Yamamuro
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Amazon Web Services Japan
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJPSolrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJPYahoo!デベロッパーネットワーク
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド崇介 藤井
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
ぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでShinichi Takahashi
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜Preferred Networks
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめOhyama Masanori
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 

Tendances (20)

DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOps
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
ニワトリでもわかるECS入門
ニワトリでもわかるECS入門ニワトリでもわかるECS入門
ニワトリでもわかるECS入門
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
Presto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon AthenaPresto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon Athena
 
MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJPSolrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
ぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまで
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 
Consistent hash
Consistent hashConsistent hash
Consistent hash
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 

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

SyncThought/代表取締役社長 海野氏
SyncThought/代表取締役社長 海野氏SyncThought/代表取締役社長 海野氏
SyncThought/代表取締役社長 海野氏loftwork
 
Microsoft Search @O365JPFUK
Microsoft Search @O365JPFUKMicrosoft Search @O365JPFUK
Microsoft Search @O365JPFUKHiroakiNagao
 
オープンソースカンファレンスBi勉強会20141018
オープンソースカンファレンスBi勉強会20141018オープンソースカンファレンスBi勉強会20141018
オープンソースカンファレンスBi勉強会20141018Hisashi Nakayama
 
エッジヘビーコンピューティングと機械学習
エッジヘビーコンピューティングと機械学習エッジヘビーコンピューティングと機械学習
エッジヘビーコンピューティングと機械学習Preferred Networks
 
DataEngConf NYC’18 セッションサマリー #1
DataEngConf NYC’18 セッションサマリー #1DataEngConf NYC’18 セッションサマリー #1
DataEngConf NYC’18 セッションサマリー #1gree_tech
 
[Gree] DataEngConf NYC’18 セッションサマリー #1
[Gree] DataEngConf NYC’18 セッションサマリー #1[Gree] DataEngConf NYC’18 セッションサマリー #1
[Gree] DataEngConf NYC’18 セッションサマリー #1Takashi Suzuki
 
シラサギ紹介20161119
シラサギ紹介20161119シラサギ紹介20161119
シラサギ紹介20161119Naokazu Nohara
 
導入時に知っておきたいHtml5+css3の基本
導入時に知っておきたいHtml5+css3の基本導入時に知っておきたいHtml5+css3の基本
導入時に知っておきたいHtml5+css3の基本Takeharu Baba
 
Ai の最新動向と今熱い chat bot による業務効率化
Ai の最新動向と今熱い chat bot による業務効率化Ai の最新動向と今熱い chat bot による業務効率化
Ai の最新動向と今熱い chat bot による業務効率化Katsuhiro Aizawa
 
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関連ライブラリiRidge, Inc.
 
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化についてDaisuke Nishino
 
20110804 広報が考えるべきkgi、kpiとその施策 nims
20110804 広報が考えるべきkgi、kpiとその施策 nims20110804 広報が考えるべきkgi、kpiとその施策 nims
20110804 広報が考えるべきkgi、kpiとその施策 nimsloftwork
 
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 - 公開用hirookun
 
141027 シックスアパート様セミナー資料
141027 シックスアパート様セミナー資料141027 シックスアパート様セミナー資料
141027 シックスアパート様セミナー資料Masaki Suzuki
 
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 の概要Ai Hirano
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_searchKazuhiro Wada
 
Prd001 イノベーションを生み出す組織へ!
Prd001 イノベーションを生み出す組織へ!Prd001 イノベーションを生み出す組織へ!
Prd001 イノベーションを生み出す組織へ!Tech Summit 2016
 
マルチクラウドで分析基盤を構築してみた Supership201612
マルチクラウドで分析基盤を構築してみた Supership201612マルチクラウドで分析基盤を構築してみた Supership201612
マルチクラウドで分析基盤を構築してみた Supership201612Supership株式会社
 
オープンデータを利用した企業分析ツール"Buffett-Code"について
オープンデータを利用した企業分析ツール"Buffett-Code"についてオープンデータを利用した企業分析ツール"Buffett-Code"について
オープンデータを利用した企業分析ツール"Buffett-Code"についてShu (shoe116)
 

Similaire à 社内ドキュメント検索システム構築のノウハウ (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"について
 

Plus de Shinsuke Sugaya

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

Plus de Shinsuke Sugaya (16)

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
 
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
 

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

  • 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