Senna + MySQL で CREATE INDEX
MySQL に Senna を組み込んで使ってみているのだが、CREATE INDEX で2つ以上の NGRAM INDEX を追加できない。
mysql> CREATE TABLE foo (a TEXT, b TEXT); Query OK, 0 rows affected (0.00 sec) mysql> CREATE FULLTEXT INDEX a USING NGRAM ON foo(a); Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW INDEX FROM foo \G *************************** 1. row *************************** Table: foo Non_unique: 1 Key_name: a Seq_in_index: 1 Column_name: a Collation: NULL Cardinality: NULL Sub_part: NULL Packed: NULL Null: YES Index_type: FULLTEXT,SENNA,N Comment: 1 row in set (0.00 sec) mysql> CREATE FULLTEXT INDEX b USING NGRAM ON foo(b); Query OK, 0 rows affected (0.23 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW INDEX FROM foo \G *************************** 1. row *************************** Table: foo Non_unique: 1 Key_name: a Seq_in_index: 1 Column_name: a Collation: NULL Cardinality: NULL Sub_part: NULL Packed: NULL Null: YES Index_type: FULLTEXT,SENNA Comment: *************************** 2. row *************************** Table: foo Non_unique: 1 Key_name: b Seq_in_index: 1 Column_name: b Collation: NULL Cardinality: NULL Sub_part: NULL Packed: NULL Null: YES Index_type: FULLTEXT,SENNA,N Comment: 2 rows in set (0.01 sec)
なんだこれ。b に FULLTEXT INDEX をつけた瞬間に a につけた INDEX から NGRAM フラグが抜けているじゃないか。ここに書いてあるのと同じ原因か?
とりあえず、CREATE TABLE のときに INDEX を指定するとうまくいく。でもこれだと Rails の Migration で create_table が使えないなぁ。