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) 如果InnoDB表“tweets”是其他InnoDB表的父表,外键约束返回“tweets”。

3) 你不能承受'tweets' 表的表级锁定。

请记住,如果它是一个表,则每个INSERT进入“tweets”表都会触发一个表级锁定MyISAM。由于它目前是一个InnoDB表(执行行级锁定),因此“推文”表可以INSERTed很快进入。

许多人想要创建一个单独的MyISAM表,称为tweets_tags,具有与“tweets”表相同的主键以及与“tweets”表TEXT中相同的名为“tags”的列。

接下来,像这样对 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 回答