* 既知の制限事項・不具合

* 制限事項

** インデックス上限値

1つのインデックスにおける論理上の上限値は以下のとおりです。

-最大レコード数: 268435455 (約2億6千万)
-最大語彙数:     268435455 (約2億6千万)
-最大インデックスサイズ: 256GByte
(実際には他の諸条件の制約により上記の値まで到達しない場合もあります)

** MySQLバインディングについて

*** MyISAMテーブルのみが対象

InnoDBは未サポートです。

*** デフォルトのエンコーディングはEUC

変更する場合は、 /var/senna/senna.conf というファイルに、
  DEFAULT_ENCODING 値
のように指定して下さい。
(値はeuc, sjis, utf8, defaultのいずれか)

*** 2ind-patchには対応していないクエリ形式があります

2ind-patchは有用ですが、一部形式のクエリに対応していません。

*** 2ind-patchを当てたMySQLでFORCE INDEXをつけるとソート順が変わります。

FORCE INDEXをつけた場合、クエリのソート順がスコア順でなくなる場合があります。

例) 以下の２つのクエリの結果が異なる
 SELECT 
 SQL_NO_CACHE cur_title FROM cur
 WHERE match(cur_text) against('united states') LIMIT 0, 100;

 SELECT 
 SQL_NO_CACHE cur_title FROM cur FORCE INDEX(PRIMARY)
 WHERE match(cur_text) against('united states') LIMIT 0, 100;

*** レプリケーション、IN BOOLEAN MODEには対応しています。

レプリケーション環境でも動作いたします。

MATCH(field) AGAINST('検索クエリ' IN BOOLEAN MODE)
の構文を利用できます。
詳しい検索クエリについては、
[[query]]を参照してください。

*** 検索速度を速くするために。
全文検索処理が高速に終わっても、出力するための処理に時間を要している場合がよくあります。
このケースについては、limit 0, 10 などのように、
出力行数を制限すると飛躍的に応答が速くなります。

また、大量のレコードに対してcount(*)などを行った際、
インデックスを用いることができないため
クエリ速度が大幅に遅くなることがあります。
[[mysql_binding]]を参考に、2ind-patchを適用ください。

*** optimize table実行後は明示的なインデックス再構築が必要
optimize tableを実行したあとには、
以下のいずれかの操作を行ってください。
-一旦fulltext indexをdropし、再度 create indexを行う
-MySQLサーバを終了させ、myisamchk -rでインデックスの再構築を行う

*** Sennaのインデックス形式が変わった場合にはインデックス再構築が必要
異なるメジャーバージョン間でのインデックスファイルの互換性は保障されていません。
以下のいずれかの操作を行ってください。
-一旦fulltext indexをdropし、再度 create indexを行う
-MySQLサーバを終了させ、myisamchk -rでインデックスの再構築を行う

** マルチプロセス・マルチスレッドでの利用について

複数のプロセスないしスレッドが一つのインデックスに対して同時に更新操作を実行することはできません。
別途排他制御が必要になります。

** SEN_SPLIT_ALPHA,DIGIT,SYMBOLについて

SEN_INDEX_NORLALIZEが指定されていない場合は利用できません。

** sen_records_find, sen_recods_atについて

sen_records_find, sen_records_atを実行した以降に、
sen_records_nextを実行した場合正しい結果が返されることは保証されません。
sen_records_rewindを実行してカーソルを初期化する必要があります。

** snippet関数のopentag, closetagについて

snippet関数を呼び終わるまで、opentagとclosetagのバッファ内容は変更できません。
変更した場合、動作が不定となります。

** sen_sel_partialオプション, sen_sym_suffix_searchについて

以下の場合、
sen_sel_partialオプションで後方一致するパターンの検索や、
sen_sym_suffix_searchにて後方一致検索を行うことができません。

-英数字や記号文字列
-SEN_INDEX_DELIMTEDを指定してインデックスを作成した場合

一般的に英語で語尾の変化はあるものの、語幹の変化は少ないと考えられます。
後方一致を行うためには、語彙表に語彙を追加しなければならず、
利用頻度と語彙表のサイズとを勘案した結果このような制限事項が存在します。

** Windows版とLinux版でインデックスの形式が異なります

Windows版とLinux版で、インデックスの形式が異なります。

** senna.hをincludeする前にstddef.hのincludeが必要となる
size_tなどの型をAPI引数として使っているため、
stddef.hに類するヘッダをincludeすることが必要となっています。

* 不具合

** AIO/DIOが使えない

Linux 2.6以降のAIO/DIO機能を用いたユーザレベルキャッシュを実装しております。
しかし、まだこの機能は不安定で、segmentation faultを起こします。

この問題は、Yappoさんにより報告されました。

** 64ビット環境でAIO/DIOがmakeできない

64ビット環境では、
AIO/DIOを用いたmakeができません。

** snippet APIで一部のsnippetの範囲が重なることがある

snippet APIでタグ付けの候補が近くに出現している場合、
snippetで出力する範囲が重なってしまうことがあります。

** sen_sel_nearオプションを用いた検索について

dfが0の単語が優先して検索されてしまいます。
