mysql全文搜索错误

lka*_*htz 7 mysql full-text-search mysql-error-1214

我尝试将全文搜索添加到现有表中.当我尝试:

alter table tweets add fulltext index(tags);
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes
Run Code Online (Sandbox Code Playgroud)

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

GWW*_*GWW 10

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


Rol*_*DBA 6

这是检查表类型的方法:

SELECT table_schema,engine FROM information_schema.tables WHERE table_name='tweet';
Run Code Online (Sandbox Code Playgroud)

只MyISAM支持FULLTEXT Indexes.

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

单击此处查看FullText Indexing通常会忽略的停用词.

您可以按照以下方式覆盖:

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>
Run Code Online (Sandbox Code Playgroud)

2)将其添加到 /etc/my.cnf

ft_stopword_file=/var/lib/mysql/stopwords.txt<BR>
ft_min_word_len=2
Run Code Online (Sandbox Code Playgroud)

3)服务mysql重启

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

您可能不希望将表'tweets'转换为MyISAM.

1)如果InnoDB表'推文'包含CONSTRAINT(s).

2)如果InnoDB表'tweets'是InnoDB具有外键约束的其他表的父级回到'推文'.

3)您无法承担"推文"表的表级锁定.

请记住,INSERT如果它是一个MyISAM表,每个进入'tweets'表将触发一个表级锁.由于它目前是一个InnoDB表(它进行行级锁定),所以'tweets'表可以INSERTed很快进入.

你们很多人想要创建一个单独的MyISAM表,称为tweets_tags"tweets"表的相同主键,以及一个TEXT名为"tags"的列,与"tweets"表中的相同.

接下来,像这样初始加载tweets_tags:

INSERT INTO tweets_tags (id,tags) SELECT id,tags FROM tweets;
Run Code Online (Sandbox Code Playgroud)

然后,定期(每晚或每6小时),将新推文加载到tweets_tags中,如下所示:

INSERT INTO tweets_tags (id,tags) SELECT id,tags FROM tweets WHERE id > (SELECT max(id) FROM tweets_tags);
Run Code Online (Sandbox Code Playgroud)