MySQL的全文搜索FULLTEXT索引与match问题

本文探讨了MySQL全文搜索的问题,特别是当设置fulltext索引后必须match所有索引字段的情况。对于中文搜索,由于命中率低及中文分词等问题,建议使用LIKE替代。
MySQL的全文搜索问题,如果你对表info的title,content(...)等字段设置了fulltext索引,则在match时,就必须match全部的索引字段,例如只match(title)则会报错:

java.sql.SQLException: Can't find FULLTEXT index matching the column list



搞了我一上午,总算是搞清楚了,有用到的可以做个借鉴。


再补充一下:

如果是中文搜索,就不要考虑了,命中率低的要命,还要另外考虑中文分词,词的长度.....

只好用LIKE了。

另请教下:大型的应用怎么做的数据库检索?或是其他搜索方式?一直都不懂网站的搜索是怎么样的方式
MySQL中的全文索引(Full-Text Index)是一种用于全文搜索的特殊索引类型,它允许在文本列中快速搜索单词或短语。全文索引主要用于CHAR、VARCHAR和TEXT类型的列。 以下是一些关于MySQL全文索引的关键点: 1. **创建全文索引**: 你可以在创建表时定义全文索引,也可以在已有表上添加全文索引。例如: ```sql CREATE TABLE articles ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (body) ) ENGINE=InnoDB; -- 或者在已有表上添加全文索引 ALTER TABLE articles ADD FULLTEXT (title, body); ``` 2. **使用全文索引**: 使用MATCH()和AGAINST()函数进行全文搜索。例如: ```sql SELECT * FROM articles WHERE MATCH(title, body) AGAINST('database'); ``` 3. **全文索引的类型**: MySQL支持自然语言全文索引和布尔全文索引。自然语言全文索引是默认的,查询时会根据相关性排序。布尔全文索引允许使用布尔操作符(如+,-,*)来精确控制搜索。 ```sql -- 自然语言全文索引 SELECT * FROM articles WHERE MATCH(title, body) AGAINST('database'); -- 布尔全文索引 SELECT * FROM articles WHERE MATCH(title, body) AGAINST('+database -mysql' IN BOOLEAN MODE); ``` 4. **全文索引的限制**: - 全文索引只能用于InnoDB和MyISAM存储引擎。 - 最小和最大索引单词长度可以通过`ft_min_word_len`和`ft_max_word_len`参数进行配置。 - 全文索引不适用于短文本或非常常见的单词。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值