mysql全文搜索实现模糊查询_MySQL模糊查询全文索引

全文索引

---------------------------------------------------------------

# MySQL-Front Dump 2.5

#

# Host: localhost Database: test

# --------------------------------------------------------

# Server version 4.0.12-nt-log

#

# Table structure for table 't3'

#

CREATE TABLE `t3` (

`name` char(12) NOT NULL default '',

`name2` char(12) NOT NULL default '',

FULLTEXT KEY `name` (`name`,`name2`)

) TYPE=MyISAM;

#

# Dumping data for table 't3'

#

INSERT INTO `t3` (`name`, `name2`) VALUES("1", "安换岚缮");

INSERT INTO `t3` (`name`, `name2`) VALUES("2", "不会吧");

INSERT INTO `t3` (`name`, `name2`) VALUES("3", "不会吧1");

INSERT INTO `t3` (`name`, `name2`) VALUES("4", "不会吧 1");

INSERT INTO `t3` (`name`, `name2`) VALUES("5", "真的不会吧");

INSERT INTO `t3` (`name`, `name2`) VALUES("6", "真的 不会吧");

mysql> SELECT * FROM t3;

+------+-------------+

¦ name ¦ name2 ¦

+------+-------------+

¦ 1 ¦ 安换岚缮 ¦

¦ 2 ¦ 不会吧 ¦

¦ 3 ¦ 不会吧1 ¦

¦ 4 ¦ 不会吧 1 ¦

¦ 5 ¦ 真的不会吧 ¦

¦ 6 ¦ 真的 不会吧 ¦

+------+-------------+

6 rows in set (0.01 sec)

# 查找词 "不会吧"

mysql> SELECT * FROM t3 WHERE MATCH (name,name2)

-> AGAINST ('不会吧'IN BOOLEAN MODE);

+------+-------------+

¦ name ¦ name2 ¦

+------+-------------+

¦ 2 ¦ 不会吧 ¦

¦ 4 ¦ 不会吧 1 ¦

¦ 6 ¦ 真的 不会吧 ¦

+------+-------------+

3 rows in set (0.00 sec)

# 查找以词 "不会吧" 开头的任意词句

mysql> SELECT * FROM t3 WHERE MATCH (name,name2)

-> AGAINST ('不会吧*' IN BOOLEAN MODE);

+------+-------------+

¦ name ¦ name2 ¦

+------+-------------+

¦ 2 ¦ 不会吧 ¦

¦ 4 ¦ 不会吧 1 ¦

¦ 6 ¦ 真的 不会吧 ¦

¦ 3 ¦ 不会吧1 ¦

+------+-------------+

4 rows in set (0.01 sec)

# 查找以词 "不会吧" 开头的任意词句 并 去除词 "真的"

mysql> SELECT * FROM t3 WHERE MATCH (name,name2)

-> AGAINST ('+不会吧* -真的' IN BOOLEAN MODE);

+------+----------+

¦ name ¦ name2 ¦

+------+----------+

¦ 2 ¦ 不会吧 ¦

¦ 4 ¦ 不会吧 1 ¦

¦ 3 ¦ 不会吧1 ¦

+------+----------+

3 rows in set (0.00 sec)

在上例中,

我们可以看出 MySQL 的全文索引对双字节处理的支持还不太好,

¦ 5 ¦ 真的不会吧 ¦

这一行记录始终未能查询出来,

这是因为在西文中词是以一个空格为分隔的,

:(

希望在将来的版本中

MySQL 对此能有所改进

而用正则表达式也是会有问题的,

# 查找词 "不会吧"

mysql> SELECT * FROM t3 WHERE name2 REGEXP "不会吧";

+------+-------------+

¦ name ¦ name2 ¦

+------+-------------+

¦ 1 ¦ 安换岚缮 ¦

¦ 2 ¦ 不会吧 ¦

¦ 3 ¦ 不会吧1 ¦

¦ 4 ¦ 不会吧 1 ¦

¦ 5 ¦ 真的不会吧 ¦

¦ 6 ¦ 真的 不会吧 ¦

+------+-------------+

6 rows in set (0.00 sec)

# 查找以词 "不会吧" 开头的

mysql> SELECT * FROM t3 WHERE name2 REGEXP "^不会吧";

+------+----------+

¦ name ¦ name2 ¦

+------+----------+

¦ 2 ¦ 不会吧 ¦

¦ 3 ¦ 不会吧1 ¦

¦ 4 ¦ 不会吧 1 ¦

+------+----------+

3 rows in set (0.00 sec)

# 查找以词 "不会吧" 结束的 mysql> SELECT * FROM t3 WHERE name2 REGEXP "不会吧$"; +------+-------------+ ¦ name ¦ name2 ¦ +------+-------------+ ¦ 2 ¦ 不会吧 ¦ ¦ 5 ¦ 真的不会吧 ¦ ¦ 6 ¦ 真的 不会吧 ¦ +------+-------------+ 3 rows in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值