音乐吧 - www.52290.com

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2296|回复: 0

mysql全文索引fulltext index

[复制链接]

1056

主题

1090

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

音乐币
101
贡献
537
金钱
4385
威望
2120
相册
1

推广达人宣传达人突出贡献荣誉管理最佳新人活跃会员

QQ
发表于 2020-11-3 13:31:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
1.简述
        通过建立mysql的全文索引进行全文搜索的功能。全文搜索可以同时搜索多个列中的多个关键字的记录结果。
        虽然like语句也能达到同样的效果,但使用全文索引效率更高,代码更简洁。
        在MySQL5.6.24以后的版本中InnoDB和MyISAM引擎搜支持全文搜索,比MySQL5.6.24低的版本只有MyISAM引擎支持全文搜索。
        mysql默认不支持中文词的搜索。
        mysql建立全文搜索的字段类型必须是char、varchar和text。
2.建立和删除全文索引
#建表的时候添加全文索引CREATE TABLE news (     id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,     title VARCHAR(200),     content TEXT,     FULLTEXT(title,content) )TYPE=MYISAM;#在已建好的表上添加全文索引ALTER TABLE `news` ADD FULLTEXT(title);#单个字段ALTER TABLE `news` ADD FULLTEXT(title,content);#多个字段#索引的删除ALTER TABLE `news` DROP INDEX title;#查看表的所有索引SHOW INDEX FROM `news`;
3.sql查询语句
#单字段搜索SELECT * FROM `news` WHERE MATCH(`字段`) AGAINST('关键词');#多字段搜索SELECT * FROM `news` WHERE MATCH(`字段`,`字段2`) AGAINST('关键词1 关键词2');
4.检索方式

     4.1、自然语言检索: IN NATURAL LANGUAGE MODE

     4.2、布尔检索: IN BOOLEAN MODE
          剔除一半匹配行以上都有的词,譬如说,每个行都有this这个字的话,那用this去查时,会找不到任何结果,这在记录条数特别多时很有用,
          原因是数据库认为把所有行都找出来是没有意义的,这时,this几乎被当作是stopword(中断词);但是若只有两行记录时,是啥鬼也查不出来的,
          因为每个字都出现50%(或以上),要避免这种状况,请用IN BOOLEAN MODE。

       ● IN BOOLEAN MODE的特色:
          ·不剔除50%以上符合的row。
          ·不自动以相关性反向排序。
          ·可以对没有FULLTEXT index的字段进行搜寻,但会非常慢。
          ·限制最长与最短的字符串。
          ·套用Stopwords。

       ● 搜索语法规则:
         +   一定要有(不含有该关键词的数据条均被忽略)。
         -   不可以有(排除指定关键词,含有该关键词的均被忽略)。
         >   提高该条匹配数据的权重值。
         <   降低该条匹配数据的权重值。
         ~   将其相关性由正转负,表示拥有该字会降低相关性(但不像 - 将之排除),只是排在较后面权重值降低。
         *   万用字,不像其他语法放在前面,这个要接在字符串后面。
         " " 用双引号将一段句子包起来表示要完全相符,不可拆字。

         SELECT * FROM news WHERE MATCH (title,content) AGAINST ('+apple -banana' IN BOOLEAN MODE);
         + 表示AND,即必须包含。- 表示NOT,即必须不包含。即:返回记录必需包含 apple,且不能包含 banner。

         SELECT * FROM news WHERE MATCH (title,content) AGAINST ('apple banana' IN BOOLEAN MODE);
         apple和banana之间是空格,空格表示OR。即:返回记录至少包含apple、banana中的一个。

         SELECT * FROM news WHERE MATCH (title,content) AGAINST ('+apple banana' IN BOOLEAN MODE);
         返回记录必须包含apple,同时banana可包含也可不包含,若包含的话会获得更高的权重。

         SELECT * FROM news WHERE MATCH (title,content) AGAINST ('+apple ~banana' IN BOOLEAN MODE);
         ~ 是我们熟悉的异或运算符。返回记录必须包含apple,若也包含了banana会降低权重。
         但是它没有 +apple -banana 严格,因为后者如果包含banana压根就不返回。

         SELECT * FROM news WHERE MATCH (title,content) AGAINST ('+apple +(>banana
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|版权声明| 音乐吧 52290 ( 桂ICP备2021006182号 )

GMT+8, 2024-5-1 19:03 , Processed in 0.038109 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 07726.Com Inc.

快速回复 返回顶部 返回列表