mysql 4.x以上提供了全文检索支持 MATCH ……AGAINST 模式(不区分大小写)

建立全文索引的表的存储引擎类型必须为MyISAM

问题是match against对中文模糊搜索支持不是太好

新建一个utf8 MyISAM类型的表并建立一个全文索引 :

CREATE TABLE articles (  id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,  title VARCHAR(200),  body TEXT,  FULLTEXT (title,body)) ENGINE=MyISAM DEFAULT >

给这个表添加点测试数据

INSERT INTO articles (title,body) VALUES  ('MySQL Tutorial','DBMS stands for DataBase ...'),  ('How To Use MySQL Well','After you went through a ...'),  ('Optimizing MySQL','In this tutorial we will show ...'),  ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),  ('MySQL vs. YourSQL','In the following database comparison ...'),  ('MySQL Security','When configured properly, MySQL ...');
SELECT * FROM articles  WHERE MATCH (title,body) AGAINST ('database'); 

mysql 默认支持全文检索的字符长度是4,可以用SHOW VARIABLES LIKE 'ft_min_word_len' 来查看指定的字符长度,也可以在mysql配置文件my.ini 更改最小字符长度,方法是在my.ini 增加一行 比如:ft_min_word_len = 2,改完后重启mysql即可。

另外,MySQL还会计算一个词的权值,以决定是否出现在结果集中,具体如下:

mysql在集和查询中的对每个合适的词都会先计算它们的权重,一个出现在多个文档中的词将有较低的权重(可能甚至有一个零权重),因为在这个特定的集中,它有较低的语义值。否则,如果词是较少的,它将得到一个较高的权重,mysql默认的阀值是50%,上面‘you'在每个文档都出现,因此是100%,只有低于50%的才会出现在结果集中。

全文检索语法

SELECT * FROM articles WHERE MATCH (title,body)   AGAINST ('+apple -banana' IN BOOLEAN MODE); 
SELECT * FROM articles WHERE MATCH (title,body)   AGAINST ('apple banana' IN BOOLEAN MODE); 
SELECT * FROM articles WHERE MATCH (title,body)   AGAINST ('+apple banana' IN BOOLEAN MODE); 
SELECT * FROM articles WHERE MATCH (title,body)   AGAINST ('+apple ~banana' IN BOOLEAN MODE);
SELECT * FROM articles WHERE MATCH (title,body)   AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE); 

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Android(安卓)模糊搜索rawquery bind or column index out of ra
  3. Andorid Dialog 示例【慢慢更新】
  4. Android(安卓)PureMVC
  5. Android横向智能刷新框架-SmartRefreshHorizontal+ScrollView 实
  6. Ubunu下搭建android NDK环境
  7. 自定义SeekBar主题
  8. android SQLite数据库基本操作示例
  9. android draw bitmap 示例代码

随机推荐

  1. Linux系统下Tar文件安装方法
  2. 在linux下安装并使用websocket
  3. 【linux学习笔记】vim命令小结
  4. [嵌入式Linux驱动]S5PV210的蜂鸣器Linux
  5. [置顶] 每天进步一点点——Linux
  6. c中变参函数的理解和编写(hello world引发
  7. Linux编程之《只运行一个实例》
  8. Linux selinux关闭方法和防火墙关闭方法
  9. 如何远程登录linux图形界面
  10. 专业嵌入式软件开发——全面走向高质高效