Successfully reported this slideshow.

図書館でのSolrの使い方

4,339 views

Published on

第5回Solr勉強会の資料

Published in: Technology
  • Be the first to comment

図書館でのSolrの使い方

  1. 1. 図書館での Solr の使い方Next-L Enju と国立国会図書館サーチ 田辺浩介tanabe@mwr.mediacom.keio.ac.jp Twitter: @nabeta
  2. 2. 自己紹介● 田辺浩介(たなべこうすけ)– 1978 年 4 月 12 日生まれ– 慶應義塾大学大学院政策・メディア研究科博士課程– 東洋大学経営学部非常勤講師– 合同会社次世代図書館システム代表社員– 司書資格持ち– Project Next-L 参加者
  3. 3. Project Next-L● 図書館関係者による 図書館管理システム開発プロジェクト – http://www.next-l.jp/● 2006 年 11 月に 慶應義塾大学文学部の原田隆史准教授 (当時)によって設立
  4. 4. Next-L Enju● Project Next-L の成果物となる オープンソース図書館管理システム● Ruby on Rails + PostgreSQL / MySQL + Apache Solr で構築● 2008 年より開発開始、 github 上で公開 – http://github.com/nabeta/next-l
  5. 5. Next-L Enjuhttp://enju2.slis.keio.ac.jp/
  6. 6. 図書館管理システムとは どのようなシステムか?●図書館の業務管理のためのシステム – 図書館の本館・分館全体でひとつ (という場合が多い) – 利用者と司書の両方が使用する●主に以下のような業務がある – 受入 – 貸出・返却 – 利用者管理
  7. 7. 受入● ある本を図書館の資料として登録する業務 – 書店からの購入、個人・団体からの寄贈 – 1 冊ごとに各図書館ごとにローカルな ID (資料番号)を割り当てる – 同じ本を複数冊購入する場合があるため ISBN だけでは管理に使えない – 予算管理もシステム内で行う場合がある
  8. 8. 貸出・返却● 貸出時に資料番号、利用者番号、 貸出期限をシステムに保存● 返却時に返却日を保存 – もしくは貸出情報を削除● 予約がかかっている場合の割り当てと通知
  9. 9. 利用者管理● 図書館の利用者についての情報 – 貸出・返却・予約 – 連絡先 ● 予約や返却時の督促に使用
  10. 10. どのようなデータがあるか (1)● 書誌データ – 本そのものについてのデータ – タイトル・著者名・出版社名・ ISBN ・ 出版日・価格 – ISSN ・巻号(雑誌の場合) – 分類記号、件名(キーワード) – 大きさ(高さ・奥行き)
  11. 11. どのようなデータがあるか (2)●所蔵データ – どの本をどこの図書館が持っているか – 図書館名、個別資料番号、受入日●貸出データ – どの本を誰がいつまで借りているか●利用者データ – 氏名・住所・メールアドレス・電話番号・ 利用者番号など
  12. 12. どのようなデータがあるか (3)● 定型、多数の検索対象となる項目を有する (書誌データ、利用者データ)● 物流管理システムの側面を持つ – 貸出・返却・予約・予算管理 – システムとしてトランザクションや 統計(集計)機能が必要
  13. 13. 検索対象● 書誌データを基本に、所蔵データ・ 貸出データの組み合わせ● たとえば… – 「ドラッカー」を含むタイトルで、 「岩崎」さんが書き、 2009 年以降に出版され、 渋谷区立中央図書館で所蔵しており、 現在予約可能な状態になっている本
  14. 14. 図書館の検索の特徴●それなりの即時性が必要 – 「現在貸し出されていない本」●データ自体はそれほど大規模ではない – 大規模館でも蔵書は数百万冊 – 比較的小さなデータがほとんど、全文の 入っているものはまだ少数●検索回数もそれほど多くない – 東京大学附属図書館で年間 550 万回、 東京都立図書館で年間 400 万回
  15. 15. 図書館の検索の問題点● 利用者は単純な検索インターフェースを好む – 複数の項目をまとめて(項目指定なしで) 検索したい – Web の検索エンジンに慣れている● 司書は複雑な検索インターフェースを必要と する – 項目を詳細に指定して検索したい
  16. 16. 典型的な検索画面 (1)
  17. 17. 典型的な検索画面 (2)
  18. 18. 求められる要件●図書館管理システムとして – 既存の RDBMS を活かしつつ、 全文検索の機能を上手に組み込める仕組み がほしい – 項目を指定しない検索と、 項目を指定した検索を両立させたい●Enju として(≒個人的な理由として) – できるだけ OS の標準的なパッケージを そのまま使いたい
  19. 19. やってみたこと (1)● Senna, Ludia – 非正規化したテーブルを用意して、そこに 検索対象のデータを保存する● 試してみたが… – ActiveRecord が使えるようになったのに、 また SQL を直接書くのが嫌 – トランザクションに対応していない – いまひとつ不安定
  20. 20. やってみたこと (2)● HyperEstraier – acts_as_searchable を使用 – 高速だが、項目指定による検索が弱い – ファセット検索機能がない – 自分で真似をしてみたが非常に遅い● ファセット検索機能のある海外の 図書館システムのソースコードを読むことに – 初めて Solr の存在を知る
  21. 21. 海外の図書館システム● 商用製品に加えて、オープンソース・ ソフトウェアとして開発されているものが 多数存在 – 開発コミュニティ” code4lib” http://code4lib.org/ ● 2011 年は Eric Hatcher さんが講演● 多くのプロジェクトで Solr を使用 – うちでも使ってみよう!
  22. 22. acts_as_solr● Ruby on Rails 用のプラグイン https://github.com/tjackiw/acts_as_solr –● Solr への接続→文書 ID の取得→ ActiveRecord からの取得を一気にやってくれる●レコードを保存したときには インデックスの更新も自動で行う●複数モデル(テーブル)にまたがる検索も 可能●開発が停滞している点に懸念
  23. 23. Sunspot● Ruby の Solr 接続用ライブラリ – 現在 Next-L Enju で使用 – https://github.com/outoftime/sunspot – Solr 1.4.1 を同梱● rsolr の上に作られており、抽象度が高い – https://github.com/mwmitchell/rsolr● Rails に依存しないが、 Rails 用の連携機能は 標準装備 – sunspot_rails
  24. 24. Sunspot の使用例 (1)
  25. 25. Sunspot の使用例 (2)
  26. 26. Sunspot の使用例 (3)
  27. 27. Rails との連携● 検索はまず全文検索システムに対して行い、 そこで得られた ID で RDB を検索して 実際のデータを取得する – acts_as_searchable, acts_as_solr, sunspot_rails ともこの方式 – ActiveRecord オブジェクトの配列が 返ってくる ● ハイライトやスニペットの取得は もう一手間必要
  28. 28. Enju での利用にあたって (1)●書誌データ・所蔵データ・利用者データの 検索で使用●DIH は使わず、 1 件ずつインデックス作成● RDB ですむ部分は RDB にやらせる – Solr が止まっても最低限の業務は動かせる ように作る
  29. 29. Enju での利用にあたって (2)● インデックス作成には CJKAnalyzer を使用 – 検索漏れを防ぐことに重点を置く● インデックスのサイズは書誌 20 万件で 約 500MB – ただし分館なしの設定(所蔵データが 少ない)のため、参考程度の値
  30. 30. 国内での使用例● 国立国会図書館サーチ – Next-L Enju をコンポーネントとして採用 – http://iss.ndl.go.jp/● 九州大学” Cute.Catalog” – http://catalog.lib.kyushu-u.ac.jp/catalog/ja
  31. 31. 国立国会図書館サーチ
  32. 32. Cute.Catalog
  33. 33. 国外での使用例● いっぱい – code4lib での発表例多数 – 検索業務特化型が多い● 代表例 : VuFind http://vufind.org/ – アメリカのヴィラノヴァ大学で開発された 図書館の検索用インターフェース – PHP + Solr 、大学を中心に採用
  34. 34. オーストラリア国立図書館http://catalogue.nla.gov.au/
  35. 35. 感想と今後の課題 (1)● 今のふつうの図書館の Web 検索であれば 1 台で十分やっていけるかもしれない – ただし commit 回数はできるだけ 減らさなければならない – 検索速度よりも更新速度のほうが問題● インデックスの使い分け – 一般利用者向けにはわかち書き – 司書向けには N-gram
  36. 36. 感想と今後の課題 (2)● 異体字の問題 – 古典資料を扱う場合は特に重要● 全文データが入ってきたときにどうするか – N-gram でもインデックス作成は間に合う?

×