1 | | 現行のOReFiLシステムの仕様や内部構造を分析する。 |
| 1 | = 現行システム分析結果 = |
| 2 | == 構成 == |
| 3 | 現行 OReFil システムの構成 |
| 4 | * Linux[[br]] |
| 5 | * Apache[[br]] |
| 6 | Apache2 (/opt/apache2) を利用している模様。[[br]] |
| 7 | /etc/httpd/conf/httpd.confは使われていない模様。[[br]] |
| 8 | * Perl[[br]] |
| 9 | CGI スクリプトとして動作。[[br]] |
| 10 | 森田環境では別途 Template モジュールを導入。[[br]] |
| 11 | * Berkeley DB[[br]] |
| 12 | 文書 ID からオンラインリソースの各種属性情報を引く為に利用されている模様。[[br]] |
| 13 | Perl の DB_File モジュール経由で利用されている。[[br]] |
| 14 | バージョンは4.2のものに依存している。[[br]] |
| 15 | * Lemur[[br]] |
| 16 | メインの検索エンジン。[[br]] |
| 17 | 検索文字列から文書 ID を引く為に利用される。[[br]] |
| 18 | 内部的には IndriRunQuery コマンドを利用している。[[br]] |
| 19 | |
| 20 | == 検索時の動作フロー == |
| 21 | フロントエンドである index.cgi (実体は index07.cgi)はおおよそ以下のようなフローをたどる。 |
| 22 | 1. 初期化 |
| 23 | 1. バックエンドに対し問い合わせ |
| 24 | 1. 入力されたパラメータを元に IndriRunQuery |
| 25 | * 以下のフォーマットで出力される(TREC フォーマット) |
| 26 | {{{ |
| 27 | <queryID> Q0 <DocID> <rank> <score> <runID> |
| 28 | }}} |
| 29 | * <DocID> はさらに以下のフォーマットで出力される |
| 30 | {{{ |
| 31 | <id>|<url>|<pmids> |
| 32 | }}} |
| 33 | 1. IndriRunQuery の結果を元に、map して grep して map |
| 34 | 1. 1回目の map[[br]] |
| 35 | IndriRunQueryの結果をパース。 |
| 36 | 1. grep[[br]] |
| 37 | パース結果をフィルタ。 |
| 38 | 1. 2回目の map[[br]] |
| 39 | パース結果を元に属性情報を取り出し、検索結果用のタプルを作る。[[br]] |
| 40 | MeSH の出現頻度を累計[[br]] |
| 41 | 1. MeSH の出現頻度を加工 |
| 42 | 1. Index の最終作成日を算出 |
| 43 | インデックスファイルの更新日時を元に算出 |
| 44 | 1. Template モジュールに食わせる元データの作成 |
| 45 | * CGI.pm と utf-8 の組合わせで発生するバグの回避コードもある。[[br]] |
| 46 | 詳しくはこちら[http://blog.nomadscafe.jp/archives/000491.html] |
| 47 | 1. Template エンジンを実行 |