mysql 4。x以上提供了全文检索支持匹配……对模式(不区分大小写)
建立全文索引的表的存储引擎类型必须为MyISAM
问题是匹配对中文模糊搜索支持不是太好
新建一个utf8 MyISAM类型的表并建立一个全文索引:
创建表的文章( id INT UNSIGNED AUTO_INCREMENT NOT NULL主键, 标题VARCHAR (200), 正文, 全文(标题、主体) )=MyISAM引擎默认在
其中全文(标题、主体)给标题和主体这两列建立全文索引,之后检索的时候注意必须同时指定这两列。
给这个表添加点测试数据
插入文章(标题、主体)值 (“MySQL教程”、“DBMS代表数据库…”), (“如何使用MySQL ', '当你经历了一个……”), ('优化MySQL ', '在本教程中我们将展示…'), (1001年MySQL技巧”、“1。从不mysqld作为根用户运行。2。…'), (' MySQL和YourSQL ', '在以下数据库比较…'), (“MySQL安全”,“当配置正确,MySQL…”); >之前全文检索测试
SELECT *从文章匹配(标题、主体)反对(“数据库”); >之前注意匹配(标题、主体)里面的值必须是前面建立全文索引的两个字段不能少。
mysql默认支持全文检索的字符长度是4,可以用显示变量如“ft_min_word_len”来查看指定的字符长度,也可以在mysql配置文件我。ini更改最小字符长度,方法是在我。ini增加一行比如:ft_min_word_len=2,改完后重启mysql即可。
另外,MySQL还会计算一个词的权值,以决定是否出现在结果集中,具体如下:
mysql在集和查询中的对每个合适的词都会先计算它们的权重,一个出现在多个文档中的词将有较低的权重(可能甚至有一个零权重),因为在这个特定的集中,它有较低的语义值。否则,如果词是较少的,它将得到一个较高的权重,mysql默认的阀值是50%,上面“你”在每个文档都出现,因此是100%,只有低于50%的才会出现在结果集中。
<强>全文检索语法强>
SELECT *从文章匹配(标题、主体)反对(' +苹果香蕉”布尔模式);>之前表示,即必须包含。-表示,即不包含。
SELECT *从文章匹配(标题、主体)反对(“苹果香蕉”在布尔模式);>之前苹果和香蕉之间是空格,空格表示,即至少包含苹果,香蕉中的一个。
SELECT *从文章匹配(标题、主体)反对(' +苹果香蕉”布尔模式);>之前必须包含苹果,但是如果同时也包含香蕉则会获得更高的权重。
SELECT *从文章匹配(标题、主体)对(“+苹果~香蕉”在布尔模式),, ~是我们熟悉的异或运算符。返回的记录必须包含苹果,但是如果同时也包含香蕉会降低权重。但是它没有+苹果香蕉严格,因为后者如果包含香蕉压根就不返回。
SELECT *从文章匹配(标题、主体)反对(' +苹果+(在香蕉& lt;橙色)”在布尔模式);>之前返回同时包含苹果和香蕉或者同时包含苹果和橙子的记录。但是同时包含苹果和香蕉的记录的权重高于同时包含苹果和橙子的记录。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
mysql全文模糊搜索匹配方法示例