id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	include_gantt	dependencies	due_assign	due_close
30	現行 OReFiL システムの分析	h-morita	h-morita	"= 現行システム分析結果 =
== 構成 ==
 現行 OReFil システムの構成
 * Linux[[br]]
 * Apache[[br]]
  Apache2 (/opt/apache2) を利用している模様。[[br]]
  /etc/httpd/conf/httpd.confは使われていない模様。[[br]]
 * Perl[[br]]
  CGI スクリプトとして動作。[[br]]
  森田環境では別途 Template モジュールを導入。[[br]]
 * Berkeley DB[[br]]
  文書 ID からオンラインリソースの各種属性情報を引く為に利用されている模様。[[br]]
  Perl の DB_File モジュール経由で利用されている。[[br]]
  バージョンは4.2のものに依存している。[[br]]
 * Lemur[[br]]
  メインの検索エンジン。[[br]]
  検索文字列から文書 ID を引く為に利用される。[[br]]
  内部的には IndriRunQuery コマンドを利用している。[[br]]

== 検索時の動作フロー ==
  フロントエンドである index.cgi (実体は index07.cgi)はおおよそ以下のようなフローをたどる。
 1. 初期化
 1. バックエンドに対し問い合わせ
  1. 入力されたパラメータを元に IndriRunQuery
   * 以下のフォーマットで出力される(TREC フォーマット)
    {{{
<queryID> Q0 <DocID> <rank> <score> <runID>
    }}}
   * <DocID> はさらに以下のフォーマットで出力される
    {{{
<id>|<url>|<pmids>
    }}}
  1. IndriRunQuery の結果を元に、map して grep して map
   1. 1回目の map[[br]]
    IndriRunQueryの結果をパース。
   1. grep[[br]]
    パース結果をフィルタ。
   1. 2回目の map[[br]]
    パース結果を元に属性情報を取り出し、検索結果用のタプルを作る。[[br]]
    MeSH の出現頻度を累計[[br]]
 1. MeSH の出現頻度を加工
 1. Index の最終作成日を算出
  インデックスファイルの更新日時を元に算出
 1. Template モジュールに食わせる元データの作成
   * CGI.pm と utf-8 の組合わせで発生するバグの回避コードもある。[[br]]
    詳しくはこちら[http://blog.nomadscafe.jp/archives/000491.html]
 1. Template エンジンを実行"	タスク	closed	各マイルストーンで解決する	Iterate2(11/22)	OReFiL		fixed			0		YYYY/MM/DD	YYYY/MM/DD
