| 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 エンジンを実行 |