morit****@razil*****
morit****@razil*****
2005年 4月 8日 (金) 01:00:42 JST
> mysqlパッチにてmyisam/ft_update.cのft_sen_index_addの中で > > sen_index_upd(info->s->keyinfo[keynr].senna, &pos, NULL, buf); > > として、index登録を行なっています。 > posは数値型の変数となり、MYDのレコードのポジションになります。 > このポインタが最終的にsennaのsym.cファイルの_sen_sym_addに渡され > > if (!size) { size = strlen((char *)key) + 1; } > > にて、keyのバイト数を求めてからidの割り当てを行なっているのですが > posは数値型なので、正確なkeyのバイト数が求められないケースが多々あります。 なるほど! 了解しました。 実はsen_index_create()関数の第2引数で文書IDのキー長を指定できるのです。 http://dev.razil.jp/project/senna/api.html より... key_sizeにキー長(バイト長)を与えます。key_sizeに0が指定された場合は 可変長(nul終端する文字列)が指定されたとみなされます。 ‥というわけで、 --- mysql-4.0.23.senna.diff.orig 2005-04-08 00:55:35.000000000 +0900 +++ mysql-4.0.23.senna.diff 2005-04-08 00:56:46.000000000 +0900 @@ -387,7 +387,7 @@ + if (!share->keyinfo[i].senna) { + /* make index files */ + sen_log("create index (%s)", buf); -+ share->keyinfo[i].senna = sen_index_create(buf, 0, SEN_INDEX_NORMALIZE, 0, sen_enc_default); ++ share->keyinfo[i].senna = sen_index_create(buf, sizeof(int), SEN_INDEX_NORMALIZE, 0, sen_enc_default); + } + } + のように直せば解消すると思います。→ 反映します。 分かりにくい仕様ですみません‥ -- morita