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 が使えないなぁ。