• 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)
  • 相关阅读:
    类型转换
    希尔排序
    冒泡排序
    More Effective C++ (静态绑定与动态类型)
    More Effective C++ (限制类的对象数量)
    算法复杂度
    交换两个数的方法
    QString类(常用函数)
    面向过程与面向对象
    QTableWidget控件总结
  • 原文地址:https://www.cnblogs.com/fengju/p/6174120.html
Copyright © 2020-2023  润新知