首页 > 解决方案 > 无法在 MYSQL 中为阿拉伯文本创建 FULLTEXT INDEX

问题描述

我有一个大型 MySQL 数据库。一张表“新闻”有超过 600 万条条目。两列是阿拉伯语文本。我可以使用以下方法为两列创建索引:

mysql> CREATE FULLTEXT INDEX news_index ON news(news_title, news_text);

但索引为空,当我尝试执行全文搜索时收到以下错误:

mysql> SELECT news_title FROM news WHERE MATCH(news_title) AGAINST('أردوغان');

ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list

该数据库使用 InnoDB 和 UTF-8。列编码是utf8_unicode_ci,我认为这可能是问题,所以我将两列更改为utf8_general_ci。

当我创建索引时,索引列表显示:

+-------+------------+---------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name      | Seq_in_index | Column_name  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+---------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| news  |          0 | PRIMARY       |            1 | news_id      | A         |     4293286 |     NULL | NULL   |      | BTREE      |         |               |
| news  |          1 | fk_news_1_idx |            1 | news_country | A         |          18 |     NULL | NULL   |      | BTREE      |         |               |
| news  |          1 | news_index    |            1 | news_title   | NULL      |     4293286 |     NULL | NULL   | YES  | FULLTEXT   |         |               |
| news  |          1 | news_index    |            2 | news_text    | NULL      |     4293286 |     NULL | NULL   | YES  | FULLTEXT   |         |               |
+-------+------------+---------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

我也尝试过仅使用以下方法创建索引:

mysql> ALTER TABLE news ADD FULLTEXT(news_title, news_text);

但同样,没有运气。我遗漏了一些东西,当我创建索引时,它运行了一个多小时,所以发生了一些事情。我错过了什么?

标签: mysqlarabicfull-text-indexing

解决方案


由于您的全文索引应用于两news_title,news_text列,因此您应该同时使用 to inMATCH()关键字

SELECT news_title FROM news WHERE MATCH(news_title,news_text) AGAINST('أردوغان');

推荐阅读