詳細/全文一致検索のカスタマイズ
全文一致検索において、漢字の異体字を同一視(包摂みたいなもの)する方法
とても面倒です。
- 同一視する文字のグループと、代表となる文字を決めます。
例えば、{鴎, 鸥, 鷗}、代表=鴎 {万, 萬}、代表=万
どの二つのグループも互いに素でなければなりません。
- 代表となる文字以外と、代表となる文字の組を作ります
鸥 鴎 鷗 鴎 萬 万
- 各文字を、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>
おわり。
最終更新日: 2014-12-09 (火) 18:25:46 (1230d)