【问题标题】:mysql full text search errormysql全文搜索错误
【发布时间】:2011-06-26 07:43:45
【问题描述】:

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

alter table tweets add fulltext index(tags);

我得到了错误:

ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes

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

【问题讨论】:

    标签: mysql full-text-search mysql-error-1214


    【解决方案1】:

    这是您检查表格类型的方式:

    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.

    您可以按如下方式覆盖它:

    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) 服务mysql重启

    还有其他需要考虑的:

    您可能不想将表格“推文”转换为MyISAM

    1) 如果InnoDB 表“推文”包含CONSTRAINT(s)

    2) 如果InnoDB 表'tweets' 是其他InnoDB 表的父级,外键约束回到'tweets'。

    3) 您不能承受“tweets”表的表级锁定。

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

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

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

    【讨论】:

    • 哇~~~这太棒了..,超出了我最初的预期....谢谢老兄。你太棒了~~
    【解决方案2】:

    如果您想使用全文索引,您需要确保您的表的底层引擎是 MyISAM。您可以使用 ALTER TABLE tweets ENGINE = MYISAM; 更改此设置

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多