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)
问题是什么?我怎么知道它是什么表类型?
这是检查表类型的方法:
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)
| 归档时间: |
|
| 查看次数: |
5298 次 |
| 最近记录: |