mysql的全文索引限制

Mysql 4.0 开始就支持全文索引功能,但是 Mysql 默认的最小索引长度是 4。

对于英文来说,这个设置是合理的,但是对于中文或者日文,这个设置就很不合理。


so,修改mysql的配置(my.cnf文件):

在 [mysqld] 后面加入一行

fft_min_word_len = n

n为小于4的数字。重启mysql即可。

### MySQL中的全文索引创建与使用 #### 创建全文索引MySQL中,创建全文索引的过程较为简单。假设存在一张名为`article`的文章表,其中包含主键`id`、文章标题`title`以及文章内容`content`三个字段。为了在这两个字段上建立全文索引,可以执行以下SQL语句: ```sql CREATE TABLE article ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), content TEXT, FULLTEXT (title, content) ) ENGINE=MyISAM; ``` 需要注意的是,当前仅支持特定存储引擎下的全文索引功能。具体来说,虽然早期版本主要由MyISAM提供支持[^2],但从MySQL 5.6起,InnoDB也开始支持全文索引[^3]。 #### 使用全文索引进行查询 一旦建立了全文索引,就可以通过`MATCH()`和`AGAINST()`函数来实现高效的文本搜索操作。例如,要在`title`和`content`字段中查找包含关键字“武汉”的记录,可采用如下方式: ```sql SELECT * FROM article WHERE MATCH(title, content) AGAINST('武汉'); ``` 这里的关键在于,`MATCH()`括号内的字段列表需严格对应于创建全文索引时所指定的字段集合[^4]。此外,当涉及多语言环境(如中文或英文混杂的情况),还需特别关注分词机制的影响及其配置参数设置[^3]。 #### 特殊情况处理 对于非标准字符组成的词条或者短语形式的数据检索需求而言,可能面临无法正常返回预期结果的现象。这是因为默认情况下,系统会依据预设规则解析输入串并将其拆分为若干独立单元再参与后续匹配流程所致。针对此类特殊场景,可以通过调整最小/最大词长限制或是自定义分隔符等方式予以优化解决[^3]。 ### 示例代码展示 下面给出一段完整的演示程序片段用于说明上述概念的实际应用效果: ```sql -- 建立测试用表结构 DROP TABLE IF EXISTS test_table; CREATE TABLE test_table( doc_id INT PRIMARY KEY , document_text LONGTEXT , FULLTEXT(document_text ) )ENGINE=INNODB; -- 插入模拟文档条目 INSERT INTO test_table VALUES(1,"This is a sample sentence."); INSERT INTO test_table VALUES(2,"Another example here with different words."); -- 执行基于全文索引条件过滤后的查询动作 SET SESSION ft_min_word_len = 2; -- 修改最小子词语长度阈值为适应更广泛范围 REPAIR TABLE test_table QUICK ; -- 对修改生效重新构建关联索引部分 SELECT *,MATCH(document_text ) AGAINST ('sample') AS relevance_score FROM test_table HAVING relevance_score>0 ORDER BY relevance_score DESC ; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值