Namazu-devel-ja(旧)


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

NMZ.head の文書数がデタラメ



寺西です。

過去に何度が質問があった話かと思いますが、NMZ.head に埋め込まれる
文書数がデタラメになる場合があります。

インデックスを新規作成した場合は正しいのですが、文書が削除された
場合にまずいようです。

次の手順で再現します。.txt ファイルが 5個、.html が 2個あるとします。

1. 新規にインデックスを作成します。
   $ mknmz *.txt *.html
   NMZ.head には文書数 7 となり、正しい値です。

2. インデックスを更新します。
   $ mknmz *.txt 
   NMZ.head には文書数 8 となり、誤った結果となっています。
   正しい値は 5 です。

これは mknmz.in:make_headfoot で、

my $total_files_count = util::commas(get_total_files() + $docid_count
   - $DeletedFilesCount - $UpdatedFilesCount);

としてファイルを求めているのですが、各値は次のようになっています。
get_total_files() : 5
$docid_count : 5
$DeletedFilesCount : 2
$UpdatedFilesCount : 0
このため、8 になります。

本来は
get_total_files() : 7
$docid_count : 0
$DeletedFilesCount : 2
$UpdatedFilesCount : 0
で、5 になるべきでしょう。

もう少し調べてみると、append_index で make_headfoot_pages を
呼び出している部分が原因のようです。
HEAD 用の差分を以下にしめします。

# cvs diff mknmz.in
Index: mknmz.in
===================================================================
RCS file: /storage/cvsroot/namazu/scripts/mknmz.in,v
retrieving revision 1.135
diff -u -p -r1.135 mknmz.in
--- mknmz.in    17 Mar 2004 06:25:34 -0000      1.135
+++ mknmz.in    23 Mar 2004 16:32:54 -0000
@@ -1822,8 +1822,8 @@ sub append_index (@) {
            set_lockfile($var::NMZ{'lock2'});
            update_dateindex();
            update_registry(0);
+           make_headfoot_pages(0, get_total_keys());
            put_log(0, 0, 0, get_total_keys());
-           make_headfoot_pages(get_status("files"),
get_status("keys"));
            util::remove_tmpfiles();
        }
        print _("No files to index.\n");

# なお、本件は 2.0.12 でも再現すると思われるので、2.0.13 の修正
# 対象からは外します。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E