我尝试将全文搜索添加到现有表中。当我尝试时:
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) 如果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);