既存のテーブルに全文検索を追加しようとしています。私が試したとき:
alter table tweets add fulltext index(tags);
エラーが発生しました:
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes
何が問題ですか?それがどのテーブルタイプであるかをどうやって知ることができますか?
既存のテーブルに全文検索を追加しようとしています。私が試したとき:
alter table tweets add fulltext index(tags);
エラーが発生しました:
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes
何が問題ですか?それがどのテーブルタイプであるかをどうやって知ることができますか?
フルテキストインデックスを使用する場合は、テーブルの基盤となるエンジンがMyISAMであることを確認する必要があります。これは、を使用して変更できますALTER TABLE tweets ENGINE = MYISAM;
テーブルタイプを確認する方法は次のとおりです。
SELECT table_schema,engine FROM information_schema.tables WHERE table_name='tweet';
のみMyISAM
をサポートしますFULLTEXT Indexes
。
ストップワードリストをプリエンプトすることもできます。
FullText Indexing
通常は無視されるストップワードについては、ここをクリックしてください。
次のようにこれをオーバーライドできます。
/var/lib/mysql
1)このようにテキストファイルを作成します
echo "a" > /var/lib/mysql/stopwords.txt<BR>
echo "an" >> /var/lib/mysql/stopwords.txt<BR>
echo "the" >> /var/lib/mysql/stopwords.txt<BR>
2)これをに追加します/etc/my.cnf
ft_stopword_file=/var/lib/mysql/stopwords.txt<BR>
ft_min_word_len=2
3)サービスmysqlの再起動
考慮すべき他のことがあります:
テーブルの「ツイート」をに変換したくない場合がありますMyISAM
。
1)InnoDB
テーブル'tweets'にが含まれている場合CONSTRAINT(s)
。
2)テーブル「tweets」が「tweets」に戻る外部キー制約を持つInnoDB
他のテーブルの親である場合。InnoDB
3)「ツイート」テーブルをテーブルレベルでロックする余裕はありません。
INSERT
'tweets'テーブルに入るたびに、テーブルの場合はテーブルレベルのロックがトリガーされることを忘れないでMyISAM
ください。現在はInnoDB
テーブル(行レベルのロックを行う)であるため、「ツイート」テーブルはINSERTed
非常にすばやく入ることができます。
多くの場合、「ツイート」テーブルと同じ「タグ」と呼ばれる列とともに「ツイート」テーブルの同じ主キーを使用してMyISAM
、と呼ばれる別のテーブルを作成する必要があります。tweets_tags
TEXT
次に、次のようにtweets_tagsの初期ロードを実行します。
INSERT INTO tweets_tags (id,tags) SELECT id,tags FROM tweets;
次に、定期的に(毎晩または6時間ごとに)、次のように新しいツイートをtweets_tagsにロードします。
INSERT INTO tweets_tags (id,tags) SELECT id,tags FROM tweets WHERE id > (SELECT max(id) FROM tweets_tags);