全文一致検索のカスタマイズ
全文一致検索において、漢字の異体字を同一視(包摂みたいなもの)する方法
とても面倒です。
- 同一視する文字のグループと、代表となる文字を決めます。 例えば、
{鴎, 鸥, 鷗}、代表=鴎 {万, 萬}、代表=万
どの二つのグループも互いに素でなければなりません。
- 代表となる文字以外と、代表となる文字の組を作ります
鸥 鴎 鷗 鴎 萬 万
- 各文字を、Unicodeのコードに変換します。
9e25 9d0e 9dd7 9d0e 842c 4e07
-
1列目で最も大きいコードを見つけます。 この例なら、9e25。これを、MAXとします。
- (0から数えて)MAX行あるファイルを作ります。 (0から数えて)n行目は、先ほどの表の1列目に数 n が現れるなら、その対応する2列目の値、 そうでなければ 0 にします。 数は、0xで始めて16進法で記述するか、0で始めて8進法で記述するか、1-9で始めて10進法で記述します。 16進法もしくは10進法で記述するとデバッグしやすいでしょう。混在させても構いません。 各行は , (コンマ)で終えます。最後の行の後のコンマはあってもなくても構いません。 /* … */ 形式のコメントも入れられますが、コメント中に多バイト文字をいれられるかどうかは お使いの環境に依存します(gccはUTF-8には文句を言わないみたい、VC++はUTF-8だと文句を言いますが、結局は通してくれます)。
例:
(最初の行は0行目と数える)
0,
0,
0,
(0x842a行省略、次の行は(0から数えて 0x842c行目))
0x4a07, /* 鸥 => 鴎 */
...
(次の行は0x9dd7行目)
0x9d0e,
...
(次の行は0x9e25行目、普通に1から数えると0x9e26行目という事になる)
0x9d0e,
-
このファイルを、eshk.hという名前で保存します。
-
eshk.hをおいたディレクトリをconfigureに伝えます。 例えば、/tmp/eshk.h を作成したのだとすると、
./configure --with-eshkdir=/tmp; make; make install
-
itbの先頭で、eshkを有効にする事を指定します
@title=test $ioptions=collapse-eshk i0 #title=森鷗外 b1森鷗外 !森鷗外
-
全文一致検索の問い合わせのオプションに、collapse-eshkを指定します
<search options="collapse-eshk"> <join><p>鴎外</p></join> </search>
おわり。