namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Namazu internal



Satoru Takabayashi <satoru@xxxxxxxxxxxxx> wrote:

>>私、ほしいので、なければ作ります。
>
>3,4日待ってもらえれば私の方で作成できます。

3,4日はとっくにすぎてしましましたが、とりあえずラフなものを作成し
てみました。

# 間違いがあったら訂正してくださいませ > 古川さん :-)

-- Satoru Takabayashi

NMZ.* ファイルの詳細

* NMZ.i
  - インデックスファイル (転置ファイル, inverted ファイル)

  構造

    [単語1\n]
    [エントリの総数 * 2][文書ID][スコア][文書ID][スコア]....
    [単語2\n]
    [エントリの総数 * 2][文書ID][スコア][文書ID][スコア]....
    [単語3\n]
    [エントリの総数 * 2][文書ID][スコア][文書ID][スコア]....
    ...

  注意点
    + 検索用インデックスのボス
    + 単語は改行コードを伴う
    + 単語はコードの若い順に並ぶ
    + 文書IDは小さい順に並ぶ --重要
    + JIS X 0208の文字はEUC-JPで記録される
    + 文書ID,スコア部はバイナリデータ


* NMZ.ii
  - インデックスファイル seek 用インデックス

  構造

    [NMZ.i中の単語1の位置][NMZ.i中の単語2の位置]
    [NMZ.i中の単語3の位置]....

  注意点
    + すべてバイナリデータ


* NMZ.h
  - キーワードの先頭 2 byte 用のハッシュテーブル

  解説

    単語の先頭2byte (65,536パターン) の出現位置を記録し、2分探索
    の範囲を狭める。たとえば stupid なら 'st' からはじまる単語の
    みを調べることになる。

  構造

    [NMZ.ii中の\x0000の位置][NMZ.ii中の\x0001の位置] ...
    [NMZ.ii中の\xffffの位置][番兵]

  注意点
    + どれだけ効率が上がるか疑問
    + すべてバイナリデータ
   

* NMZ.f
  - 文書のリストのファイル (各文書の情報を記録)

  解説

    検索結果時に表示する要約の情報を記録する

  構造

    <DT>
    <STRONG><A HREF="@@URL@@">@@TITLE@@</A></STRONG>
    <DD>@@要約の内容@@
    <DD><A HREF="@@URL@@">@@URL@@</A> size (x,xxx bytes)<BR><BR>
    (空行)

  注意点
    + 最後に必ず空行が必要
    + URLを置き換えたりする関係でこのフォーマットは崩してはいけない
    + 将来的には別のフォーマットに変える予定


* NMZ.fi
  - 文書のリストのファイル seek 用インデックス

  構造

    [NMZ.f中の文書ID1の位置][NMZ.f中の文書ID2の位置]
    [NMZ.f中の文書ID3の位置]....

  注意点
    + すべてバイナリデータ


* NMZ.r
  - インデックスに登録されているファイルのリスト

  構造

    インデックスに登録されている文書ファイルを一行にひとつづつ記
    録している。ただし、 '# ' からはじまる行はインデックスから削
    除されたファイルを意味する。 '## ' からはじまる行はコメント

  例

    /home/foo/hoge1.html
    /home/foo/hoge2.html
    /home/foo/hoge3.html
    ## indexed: Mon, 26 Oct 1998 01:23:45
    (空行)
    # /home/foo/hoge1.html
    ## deleted: Mon, 26 Oct 1998 12:34:56


* NMZ.w
  - 正規表現/中間/後方一致用の単語表

  構造

    単なる行指向のテキスト。コードの若い順に並ぶ。行番号をもとに 
    NMZ.ii をseekできる


* NMZ.p
  - フレイズ検索用のインデックス

  解説

    2つの単語を 16bitのハッシュ値に変換して記録する。フレイズ検索
    の際にはあらかじめフレイズを構成する各単語を ANDで検索し、その
    後で NMZ.p を参照して語の順序を確認する。ただし、2単語づつの順
    序しか記録していないのでたとえば "foo bar baz" で検索すると 
    "foo bar" と "bar baz" を含む文書もヒットしてしまう。また、ハッ
    シュ値の衝突により不適当な文書がヒットすることもある。欠点はあ
    るもののそれなりに機能する。

  構造

    [ハッシュ値\x0000を含む文書ID][ハッシュ値\x0000を含む文書ID]...
    [ハッシュ値\x0001を含む文書ID][ハッシュ値\x0001を含む文書ID]...
    ...
    [ハッシュ値\xffffを含む文書ID][ハッシュ値\xffffを含む文書ID]

  注意点  
    + 文書IDは小さい順に並ぶ --重要


* NMZ.pi
  - フレイズ検索用のインデックスのインデックス

  構造

    [NMZ.p中の\x0000の位置][NMZ.p中の\x0001の位置] ...
    [NMZ.p中の\xffffの位置]

  注意点
    + すべてバイナリデータ


* NMZ.t
  - 文書のタイムスタンプ、欠番の情報を記録

  解説
  
    ファイルのタイムスタンプを 32bitで記録する。検索結果の日付順の
    ソートに利用される。また、値が -1 のときはその文書は欠番とみな
    される。


  構造

    [文書ID1のタイムスタンプ][文書ID2のタイムスタンプ]...

   
* NMZ.field.{subject,from,date,message-id,...}
  - フィールド検索用のインデックスのインデックス

  解説
  
    フィールド指定の検索に使われる。構造は単なる行単位のテキスト。
    正規表現のエンジンに読まれる。行番号をそのまま文書IDとして使え
    る。


* NMZ.head.[a-z]{2}
  - 検索結果出力用ヘッダファイル

* NMZ.foot.[a-z]{2}
  - 検索結果出力用フッタファイル

* NMZ.body.[a-z]{2}
  - キーワードが与えられなかったときのメッセージ

* NMZ.log
  - インデックスの更新ログ

* NMZ.lock
  - 検索時のロックファイル

* NMZ.lock2
  - インデックス作成時のロックファイル

* NMZ.le
  - little-endian なインデックスのときに存在

* NMZ.be
  - big-endian なインデックスのときに存在

* NMZ.slog
  - 検索されたキーワードのログ

  注意点
    + 書き込み時にロックを行っていない