mysql全文搜索错误

时间:2011-02-13 03:47:30

标签: mysql full-text-search mysql-error-1214

我尝试将全文搜索添加到现有表格中。我试过的时候:

alter table tweets add fulltext index(tags);

我收到了错误:

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

有什么问题?我怎么知道它是什么表类型?

2 个答案:

答案 0 :(得分:10)

如果要使用全文索引,则需要确保表的底层引擎是MyISAM。您可以使用ALTER TABLE tweets ENGINE = MYISAM;

更改此设置

答案 1 :(得分:6)

这是检查表类型的方法:

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

MyISAM支持FULLTEXT Indexes

您可能还想抢占禁用词列表。

Click Here for the Stop Words that FullText Indexing Would Normally Ignore.

您可以将其覆盖为Follows:

1)在/var/lib/mysql中创建一个像这样的文本文件

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)service mysql restart

这是另外需要考虑的事情:

您可能不想转换表格&#39;推文&#39;到MyISAM

1)如果InnoDB表&#39;推文&#39;包含CONSTRAINT(s)

2)如果InnoDB表&#39;推文&#39;是具有外键约束的其他InnoDB表的父级回到&#39;推文&#39;。

3)您无法承担表格级锁定的推文。表

请记住,每个INSERT都会在“推文”中发送。如果表是MyISAM表,则表将触发表级锁。由于它目前是一个InnoDB表(执行行级锁定),因此推文&#39;表格可以很快INSERTed

您可能希望创建一个名为MyISAM的单独tweets_tags表格,其中包含相同的主要关键字&#39;推文&#39;表格以及名为&#39;标记&#39;的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);