前言:
以下内容 毫不客气滴说:均来自网络 上面的三个词混着在正文中
正文:
查询关键字和查询列内容见相关度进行检索,可利用全文索引提高匹配速度
MATCH(col*) AGAINST(expr[search_modifier])要匹配的列,要找的内容,以相关性排序、由高到低
在MySQL5.6及其以下,只有MyISAM表支持全文检索(英文)。
在MySQL5.6以上Innodb引擎表也提供支持全文检索。
相应字段建立FULLTEXT索引
CREATE TABLE `zzx_articles` (
`id` int(10) unsigned NOT NULL auto_increment,
`title` char(254) default NULL COMMENT '标题',
`content` text COMMENT '内容',
`author` char(60) default NULL COMMENT '作者',
`title_fc` char(254) default NULL COMMENT '标题的分词',
`content_fc` text COMMENT '内容的分词',
PRIMARY KEY (`id`),
FULLTEXT KEY `zzx_title_fc` (`title_fc`),//看这里
FULLTEXT KEY `zzx_content_fc` (`content_fc`),//看这里
FULLTEXT KEY `zzx_title_con_fc` (`title_fc`,`content_fc`)//看这里
) ENGINE=MyISAM DEFAULT CHARSET=utf8
MATCH(title, content)里的字段必须和FULLTEXT(title, content)里的字段一模一样
如果只要单查title或content一个字段,那得另外再建一个 FULLTEXT(title) 或 FULLTEXT(content)
1、自然语言检索: IN NATURAL LANGUAGE MODE
2、布尔检索:IN BOOLEAN MODE
剔除一半匹配行以上都有的词,表中每行的待查字段都有this、用this去查不会有结果(中断词、都查出来?)
1、不自动以相关性反向排序;
2、可对没有fulltext index字段搜寻(慢);
3、限制最长短字符串;
4、套用stopwords
+:一定要有该关键字;
2、-:不可以有;
3、>:提高该条匹配数据的权重值;
4、<:降低;
5、~:将其相关性由正转负,拥有该字会降低相关性;
6、*:万用字,接在字符串后;
7、””:用双引号包起来,要完全相符,不可拆
SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple +(>banana
返回必须同时包含“apple banana”或者必须同时包含“apple orange”的记录。
若同时包含“apple banana”和“apple orange”的记录,则“apple banana”的权重高于“apple orange”的权重。
这个我执行的例子+ - 并没有完全起作用
3、查询扩展检索:with query expansion
拿大神博客中的例子上一张图:select中定义了三个别名,作为排序的依据,这个和where配合使用、可不配合(具体要听需求的)
系统变量:
ft_min_word_len=全文检索的最小许可字符(默认4)
SHOW VARIABLES LIKE 'ft_min_word_len' 中文两个字一个词,做中文检索修改为2
方法:
修改配置文件my.ini,添加:ft_min_word_len = 2
不支持中文全文索引:中文连着写,mysql无法找到分词(5.6)
如果一定要查:
整句的中文分词,按urlencode、区位码、base64、拼音进行编码,字母+数字的方式存储于库中
不支持大小写:
若要分,columne的character set 要从utf8改成utf8_bin
MySQL内置了ngram全文检索插件,用来支持中文分词,并且对MyISAM和InnoDB引擎有效
InsideMySQL大神曾说:mysql自带全文索引的性能与solr在同一个数量级,并没有特别明显的差距,自行测试、本宝就不验证了;这个具体看博客吧,挺详细的,和5.6页差不多
https://blog.csdn.net/mysqldba23/article/details/70160862
https://www.jb51.net/article/100472.htm
https://blog.csdn.net/shuishui8310/article/details/49889735
字符集:字符及字符对应的编码的集合;转换表和编码方案的组合
支持层次:服务器(server),数据库(database),数据表(table)和连接(connection)
存取数据时,没有指定字符集和规则则向前追溯,安装程序时自动在配置文件中配置default-character-set=utf8,utf8_general_ci默认collation
Utf8目前最适合于实现多种不同字符集间的转换的字符集
如中文字符集gb2312包括简体中文所有规定汉子及对应代码
每种字符集有其对应的规则
Collation字符序:
比较字符的规则的集合,确定后才能在一个字符集上定义什么是等价的字符、及字符间的大小关系,latin1
有了规则可将数据排序,对同一组字符集可有不同排序标准
不同字符集传递到mysql:
存储时客户端将字符以ASCII或UNICODE方式发给服务器,服务器把字符传递给mysql,mysql针对当前连接的设置转换字符,存储
读取,mysql从表中取出数据,更加当前连接,转换下编码发送给客户端,安装ASCII或UNICODE显示
查看命名:
支持的字符集:
1、show character set;
2、select * from information_schema.character_sets;
3、select character_set_name,default_collate_name,description,maxlen from information_schema.character_sets;
https://blog.csdn.net/qq_41880379/article/details/79650322
https://www.2cto.com/database/201703/618235.html
http://imysql.cn/charset_tips
https://www.cnblogs.com/wcwen1990/p/6917109.html
学习总结——看见没~一个个小胶印