如何实现Mysql中的 match,against *** 作

如何实现Mysql中的 match,against  *** 作,第1张

1.使用Mysql全文检索fulltext的先决条件

表的类型必须是MyISAM

建立全文检索的字段类型必须是char,varchar,text

2.建立全文检索先期配置

由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个.

*Unix用户要修改my.cnf,一般此文件在/etc/my.cnf,如果没有找到,先查找一下find / -name 'my.cnf'

在 [mysqld] 位置内加入:

ft_min_word_len = 2

其它属性还有

ft_wordlist_charset = gbk

ft_wordlist_file = /home/soft/mysql/share/mysql/wordlist-gbk.txt

ft_stopword_file = /home/soft/mysql/share/mysql/stopwords-gbk.txt

稍微解释一下:

ft_wordlist_charset 表示词典的字符集, 目前支持良好的有(UTF-8, gbk, gb2312, big5)

ft_wordlist_file 是词表文件, 每行包括一个词及其词频(用若干制表符或空格分开,消岐专用)

ft_stopword_file 表示过滤掉不索引的词表, 一行一个.

ft_min_word_len 加入索引的词的最小长度, 缺省是 4, 为了支持中文单字故改为 2

3.建立全文检索

在建表中用FullText关键字标识字段,已存在的表用 ALTER TABLE (或 CREATE INDEX) 创建索引

CREATE fulltext INDEX index_name ON table_name(colum_name)

4.使用全文检索

在SELECT的WHERE字句中用MATCH函数,索引的关键词用AGAINST标识,IN BOOLEAN MODE是只有含有关键字就行,不用在乎位置,是不是起启位置.

SELECT * FROM articles WHERE MATCH (tags) AGAINST ('旅游' IN BOOLEAN MODE)

MySQL目前主要的索引类型有下面几种:

与前面的普通索引类似,但是他的索引列的值必须是唯一的,所以叫唯一索引,但是这个索引字段如果是空值是可以的,具体创建方式如下:

主键索引是一种特殊的索引,一个表只能有一个主键,不允许有空值,一般是创建表的时候创建主键索引,而且一般习惯设置成自增的,因为对弈MySQL的底层B+树存储起来很方便

组合索引指多个字段上创建的索引,只有在查询时候,查询条件中使用了创建索引时的第一个字段,索引才会生效,他使用遵循最左前缀原则.

索引生效情况:

select * from table where name=1

select * from table where name=1 and city=2

select * from table where name=1 and city=2 and age=3

索引不生效情况:

select * from table where name=1 and age=3

select * from table where city=2 and age=3

select * from table where age=3

select * from table where city=2

这个遵循的是最左原则,具体MySQL底层对联合索引的存储以及为什么是最左原则,参考本人另外一篇文章最后一段就能看明白

https://www.jianshu.com/p/99aabf9611a3

全文索引主要是用来查找文本中的关键字,而不是直接与索引中的值相比较.fulltext索引跟其他索引大不相同,他更像是一个搜索引擎,而不是简单的where 语句的参数匹配,fulltext索引配合match(匹配)和against(反对) *** 作使用,而不是一般的where语句加上like,他可以在create table,alter table,create index使用


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8517821.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存