homeホームHTMLに役立つヒントマニュアルに書いてないNAMAZU > 機能を拡張する

機能を拡張する

 あなたのNAMAZUの機能を拡張しましょう。

複数のインデックスを作る

複数のインデックスから検索対象を選ぶ

簡単検索機能を付ける

KAKASIに専門辞書を登録する


●複数のインデックスを作る

 NAMAZUでは、一つのディレクトリにはインデックスは一つしかおけない仕様になっています。なので、複数のインデックスを作るには、「index」ディレクトリの下にインデックス別にディレクトリを作ります。そのディレクトリに移動してからインデックス作成コマンドを実行します。すると、そのディレクトリに目的のインデックスが作成されます。分野ごと、話題ごとにインデックスを分けて作ると便利でしょう。

index--+-indexA
    +-indexB
    +-indexC

 ここで、インデックスについてもう少し触れておきます(ちょっとしたことだけど悩むことも参照)。
 例えば「indexA」ディレクトリの下には一つのインデックスしかおけませんが、一つのインデックスの中には複数の検索対象(インデックス作成対象ディレクトリ)があってもかまいません。
 どういうことかというと、例えば次のようなディレクトリがあるとします。

/home/name/html/A
/home/name/html/B
/home/name/html/C

 ディレクトリAとBとCのインデックスは一つのインデックスとして作成することができます。AとBのディレクトリに、同じ名前のファイル「file01」があったとしても、インデックスはちゃんとディレクトリを認識していますからゴッチャになることはありません。これにどんな意味があるかというと、例えば次のようなことができます。

index--+-indexA--ディレクトリAとBとCのインデックス
    +-indexD--ディレクトリDのインデックス
    +-indexE--ディレクトリEのインデックス

 話題ごとに「indexA」「indexD」「indexE」と分けておき、ファイル数が多くなったため分割したディレクトリABCを一つのインデックスにまとめておく、などということができるわけです。

●複数のディレクトリを対象にして一つのインデックスを作る。
 ディレクトリABCのように複数のディレクトリから一気にインデックスを作るには、コマンドから「mknmz 対象ディレクトリ 対象ディレクトリ」と記述して行くほかに、まず対象ディレクトリのリストを作り、そのリストに従ってインデックスを作る方法があります。

1.「indexlist」という名前(この名前は何でもO.K.)で次のような内容のリストファイルを作ります。漢字コードはEUC、改行コードはLFにして作成してください。

  /home/name/html/A
  /home/name/html/B
  /home/name/html/C

2.「indexlist」を「indexA」ディレクトリ(インデックスを作りたいディレクトリ)に置きます。

3.telnetして「indexA」ディレクトリにいき、LANGがjaか確認した後、次のコマンドを打ち込みます(mknmzrcが任意の位置にある場合はその指定を忘れずに)。
 mknmz -F indexlist

 インデックスを作るディレクトリ以外からコマンドを打ち込む場合は、インデックスを作るディレクトリを-Oで指定します。(mknmzrcが任意の位置にある場合はその指定を忘れずに

mknmz -O インデックスを作るディレクトリ -F リストのある場所/リスト名

 これで「indexA」ディレクトリにABCディレクトリのインデックスが作られます。このインデックスを更新したい場合は、もう一度3.を繰り返します。変更のあったものだけ自動的に探してインデックスに追加・削除してくれます。


●複数のインデックスから検索対象を選ぶ

 「NMZ.head.ja」をそのままにしておくと、インデックスの指定がありませんから「index」ディレクトリ直下しか探してくれません。上のように複数インデックスを作った場合、「index」ディレクトリに何もインデックスがないと、検索結果は空になります。そこで、「NMZ.head.ja」をちょっといじってやります。

<p>
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="indexA" checked>基本インデックス
<li><input type="checkbox" name="idxname" value="indexD">indexD
<li><input type="checkbox" name="idxname" value="indexE">indexE
</ul>
</p>

検索対象:

  • 基本インデックス
  • indexD
  • indexE

 このようにすると、検索させたいインデックスをユーザーが選ぶことができます。「 checked」を記述しておくと、最初から選択されます。
 「value=""」と空の指定をすると「index」直下のインデックスファイルだけ検索します(その下のディレクトリのインデックスは検索しない)。上の例でいうと、index直下には「indexA」「indexD」「indexE」のディレクトリがあるだけで、インデックスファイルはありませんので何も検索されないことになります。


●簡単検索機能を付ける

 「NMZ.head.ja」をいじって、簡単検索機能を付けてみます。ここではカメラの名前を最初からセットして置いて検索する例です。赤い部分を適当に変更してください。

<form method="get" action="{cgi}">
<P>
<STRONG>検索式:</STRONG>
<SELECT name="query">
<OPTION value="" selected>↓下から単語を選んで簡単検索
<OPTION value="">●カメラメーカー名 ←この行はプルダウンメニューの見出しに使ってます
<OPTION value="μII μ2 ミュー2 ミューII"> μII
<OPTION value="カメラ名1"> カメラ名1
<OPTION value="カメラ名2"> カメラ名2
   
</SELECT>
<INPUT TYPE="submit" NAME="submit" VALUE="Search!">
<INPUT TYPE="hidden" NAME="whence" VALUE="0">
</P>

<P>
<!-- *******検索するインデックスの指定******* -->
<input type="hidden" name="idxname" value=""> ←ここでは基本インデックスを指定してます
<p>
<strong>検索対象:</strong>
<ul>

 ↓この下ではオプションのインデックスを選べるようにしてます
<li><input type="checkbox" name="idxname" value="camera" checked>camera
<li><input type="checkbox" name="idxname" value="test">test
</ul>
</p>

<STRONG>表示件数:</STRONG>
<SELECT NAME="max">
<OPTION VALUE="10">10
<OPTION VALUE="20" SELECTED>20
<OPTION VALUE="30">30
<OPTION VALUE="50">50
<OPTION VALUE="100">100
</SELECT>

<STRONG>要約表示:</STRONG>
<SELECT NAME="format">
<OPTION VALUE="long" SELECTED>ON
<OPTION VALUE="short">OFF
</SELECT>

<STRONG>ソート:</STRONG>
<SELECT NAME="sort">
<OPTION VALUE="score" SELECTED>スコア
<OPTION VALUE="later">日付の遅い順
<OPTION VALUE="earlier">日付の早い順
</SELECT>
</form>

 カメラの掲示板の検索ページで実際に動いています。


●KAKASIに専門辞書を登録する

 この項目、僕は実際にやっていないので、間違っている可能性が高いです。ご注意。うまくいかなくても勘弁してね。

●辞書への追加方法
 KAkASIのソースパッケージの中に「kakasidict」があります。これがKAKASIの辞書のもとです。kakasidictはテキストファイルになっていて、このままでは辞書ファイルとして使えません。KAKASIのインストール時に、自動的に変換されて「/usr/local/share/kakasi/kanwadict」に保存されます。

 もし、追加する単語数が少ないのであれば、kakasidictに単語を追加して、これを辞書ファイルの変換して「/usr/local/share/kakasi/kanwadict」と差し換えます。

 専門辞書のように大量の辞書をマージしたいなら、kakasidictといっしょに辞書ファイルに変換してやります。

●元ファイルの構造
 変換前の元ファイルは「ひらがな(半角スペース)漢字(改行)」という構造になっています。追加する単語や専門辞書などはこういう構造であれば問題ないでしょう。

●変換方法
 kakasidictに単語を追加したのであれば、次のように変換します。

mkkanwa kanwadict kakasidict

 これでkanwadictという名前の辞書ファイルが出来上がります。

 専門辞書をマージするには次のように行います。

mkkanwa kanwadict kakasidict 専門辞書名

 これでkanwadictという名前の辞書ファイルが出来上がります。

 後は出来上がったkanwadictを「/usr/local/share/kakasi/kanwadict」と差し換えます。
 ただし、この領域はシステム領域なので、su権限が必要です。

 また、辞書を入れ替えたら、インデックスを作りなおす必要があるということです。これも僕は未確認。なんで辞書を入れ替えたらインデックスをやり直さなくてはならないのか、理由も良く分かりません<(_ _)>

▲トップへ