7

既存のテーブルに全文検索を追加しようとしています。私が試したとき:

alter table tweets add fulltext index(tags);

エラーが発生しました:

ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes

何が問題ですか?それがどのテーブルタイプであるかをどうやって知ることができますか?

4

2 に答える 2

10

フルテキストインデックスを使用する場合は、テーブルの基盤となるエンジンがMyISAMであることを確認する必要があります。これは、を使用して変更できますALTER TABLE tweets ENGINE = MYISAM;

于 2011-02-13T03:49:34.653 に答える
6

テーブルタイプを確認する方法は次のとおりです。

SELECT table_schema,engine FROM information_schema.tables WHERE table_name='tweet';

のみMyISAMをサポートしますFULLTEXT Indexes

ストップワードリストをプリエンプトすることもできます。

FullText Indexing通常は無視されるストップワードについては、ここをクリックしてください。

次のようにこれをオーバーライドできます。

/var/lib/mysql1)このようにテキストファイルを作成します

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_tagsTEXT

次に、次のように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);
于 2011-02-13T04:36:45.320 に答える