Specification of NMZ.* files

# NMZ.* ファイルの仕様

## 目次

- NMZ.i
- NMZ.ii
- NMZ.w
- NMZ.wi
- NMZ.r
- NMZ.p
- NMZ.pi
- NMZ.t
- NMZ.field.{subject,from,date,message-id,...}
- NMZ.field.{subject,from,date,message-id,...}.i
- NMZ.access
- NMZ.status
- NMZ.result
- NMZ.head
- NMZ.foot
- NMZ.body
- NMZ.tips
- NMZ.log
- NMZ.lock
- NMZ.lock2
- NMZ.slog

## NMZ.i

単語検索用のインデックスファイル (転置ファイル, inverted ファイル)

### 構造

単語毎に、[その単語を含む文書 ID][スコア]を並べて「レコード」を作る。 その長さは可変になるので、先頭に、そのデータ長を記録する。

        [単語1用 データ長][文書ID][スコア][文書ID][スコア]...
        [単語2用 データ長][文書ID][スコア][文書ID][スコア]...
        [単語3用 データ長][文書ID][スコア][文書ID][スコア]...
           :

### 注意点

- 文書IDは小さい順に並ぶ --重要
- 文書IDは差分だけを記録する。
  例: 1, 5, 29, 34 -> 1, 4, 24, 5
- データはすべて pack 'w' で保存される (BER圧縮)

## NMZ.ii

NMZ.iの seek 用インデックス

### 構造

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

### 注意点

- すべてバイナリデータ (pack 'N')

## NMZ.w

単語の一覧表

### 構造

単なる行指向のテキスト。昇順に並ぶ。行番号をもとに NMZ.ii をseekできる。 (行番号 = 単語ID)

### 注意点

- 単語の並びは昇順
- 正規表現/中間/後方一致はこのファイル全体を grep する。
- JIS X 0208の文字はEUC-JPで記録される

## NMZ.wi

NMZ.w の seek 用インデックス

### 構造

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

### 注意点

- すべてバイナリデータ (pack 'N')

## NMZ.r

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

### 構造

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

        /home/foo/bar1.html
        /home/foo/bar2.html
        /home/foo/bar3.html
        ## indexed: Sun, 08 Jan 2006 02:28:00 +0900
        (空行)
        # /home/foo/bar1.html
        ## deleted: Sun, 08 Jan 1998 12:34:56 +0900

## NMZ.p

フレイズ検索用のインデックス

### 解説

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

### 構造

                     |←                     データバイト数1                      →|
    [データバイト数1][ハッシュ値\x0000を含む文書ID 1][ハッシュ値\x0000を含む文書ID 2]...
                     |←                     データバイト数2                      →|
    [データバイト数2][ハッシュ値\x0001を含む文書ID 1][ハッシュ値\x0001を含む文書ID 2]...
    ...
    [データバイト数n][ハッシュ値\xffffを含む文書ID 1]...

### 注意点

- 文書IDは小さい順に並ぶ --重要
- 文書IDは差分だけを記録する。
  例: 1, 5, 29, 34 -> 1, 4, 24, 5
- データはすべて pack 'w' で保存される (BER圧縮)

## NMZ.pi

フレイズ検索用のインデックスのインデックス

### 構造

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

### 注意点

- すべてバイナリデータ (pack 'N')
- 常に 256 Kb

## NMZ.t

文書のタイムスタンプ、欠番の情報を記録

### 解説

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

### 構造

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

### 注意点

- すべてバイナリデータ (pack 'N')
- 2038年問題を抱えている

## NMZ.field.{subject,from,date,message-id,...}

フィールド情報を記録するファイル

### 解説

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

### 構造

単なる行指向のテキスト。(行番号 = 文書ID)

### 注意点

単なる行指向のテキストなのでエディタなどで書き換えてもいい。 ただし、その際は必ず rfnmz で NMZ.field.{subject,from,date,message-id,...}.i ファイルを再構築すること。

## NMZ.field.{subject,from,date,message-id,...}.i

NMZ.field.{subject,from,date,message-id,...} の seek 用インデックス

### 構造

        [文書ID1のフィールドの位置][文書ID2のフィールドの位置]...

### 注意点

- すべてバイナリデータ
- すべてバイナリデータ (pack 'N')

## NMZ.access

アクセスを制限するための設定ファイル

### 構造

IPアドレス・ホスト名・ドメイン名によるアクセス制限を行う。 `deny` でアクセスを許可しないホストを、 `allow` でアクセスを許可するホストを指定する。IP アドレスを指定したときは前方一致で評価され、ホスト名・ドメイ ン名で指定したときは後方一致で評価される。`all` は「すべてのホスト」を表す。設定は上から順に評価される。例:

        deny all
        allow localhost
        allow 123.123.123.
        allow .example.jp

この例では、 localhost または IPアドレスが 123.123.123. から 始まるホスト、または .example.jp ドメインに属するホストからの みのアクセスを許可する。それ以外のホストからのアクセスは拒否 する。

Webサーヴァが Apache の場合、ホスト名・ドメイン名によるアク セス制限を行うには、 httpd.conf に

        HostnameLookups On

の設定が必要。

## NMZ.status

インデックスを更新するために必要なデータを保存する。

## NMZ.result

検索結果の書式を指定するファイル

### 解説

${フィールドの名前} の部分はそのフィールドの内容に置き換 えられる。つまり、 ${title} なら NMZ.field.title の内容 に置き換わる。${namazu::counter}, ${namazu::score} は特 別な意味を持つ。それぞれ、検索結果の番号、スコアに置き換 わる。

標準では NMZ.result.normal と NMZ.result.shortが 用意されて いる。利用者は自由に NMZ.result.* を作成できる。

## NMZ.head

検索結果の冒頭部分。

## NMZ.foot

検索結果の末尾部分。

## NMZ.body

検索式の説明。キーワードが与えられなかったときに表示される。

## NMZ.tips

検索のコツ。検索に何もヒットしなかったときに表示される。

## NMZ.log

インデックスの更新ログ。

## NMZ.lock

検索時のロックファイル。

## NMZ.lock2

インデックス作成時のロックファイル。

## NMZ.slog

検索されたキーワードのログ。

### 注意点

- 書き込み時にロックを行っていない

Namazu Homepage

Copyright (C) 2000-2008 Namazu Project. All rights reserved.
$Id: nmz.html,v 1.12.8.6 2008-03-04 20:57:16 opengl2772 Exp $