我尝试将全文搜索添加到现有表格中。我试过的时候:
alter table tweets add fulltext index(tags);
我收到了错误:
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes
有什么问题?我怎么知道它是什么表类型?
答案 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);