[Senna-dev 13] Re: revision 7

Back to archive index

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



Senna-dev メーリングリストの案内
Back to archive index