当前位置:首页 > 开发 > 数据库 > 正文

mysql 全文模糊查找 便捷解决方案

发表于: 2013-06-14   作者:alxw4616   来源:转载   浏览:
摘要: mysql 全文模糊查找 便捷解决方案 2013/6/14 by 半仙 alxw4616@Msn.com 目的: 项目需求实现模糊查找. 原则: 查询不能超过 1秒. 问题: 目标表中有超过1千万条记录. 使用like '%str%' 进行模糊查询无法达到性能需求. 解决方案: 使用mysql全文索引. 1.全文索引 : MySQL支持全文索引和搜索功能。MySQL中的全文索
mysql 全文模糊查找 便捷解决方案
2013/6/14 by 半仙 alxw4616@Msn.com

目的: 项目需求实现模糊查找.
原则: 查询不能超过 1秒.

问题: 目标表中有超过1千万条记录. 使用like '%str%' 进行模糊查询无法达到性能需求.
解决方案: 使用mysql全文索引.
1.全文索引 : MySQL支持全文索引和搜索功能。MySQL中的全文索引类型FULLTEXT的索引。  FULLTEXT 索引仅可用于 MyISAM 表;他们可以从CHAR、 VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或 CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引, 其速度比把资料输入现有FULLTEXT索引的速度更为快。
2.语法     :  select * from test where match(content) against('"iphone"' IN BOOLEAN MODE)
IN BOOLEAN MODE  布尔全文搜索(详细说明见: http://dev.mysql.com/doc/refman/5.1/zh/functions.html#fulltext-search);

新的问题: 1. 在mysql 中全文索引 不支持中文分词.
2. 在使用全文索引时 不支持模糊查找.
//table
id content
1 iphone
2 iphone5
3 wphone5
select * from test where match(content) against('"iphone"' IN BOOLEAN MODE)
//只能得到
1 iphone
//不能模糊找到
2 iphone5
3 wphone5

解决方案:
1.微调MySQL全文搜索 : 修改my.cnf () (linux下使用 whereis my.cnf 查找该文件 )
[mysqld]
# 不使用停止词
ft_stopword_file = ''
# 最少单词 为1个字的英文
ft_min_word_len = 1

重启mysql(linux:service mysql restart)
重建索引 REPAIR TABLE tableName QUICK (tableName 表名)
2. 入库时使用 unicode 编码 将所有字符编码
// 将 phone 编码 >> \u0070\u0068\u006f\u006e\u0065
//table
id content
1 \u0069\u0070\u0068\u006f\u006e\u0065
2 \u0069\u0070\u0068\u006f\u006e\u0065\u0035
3 \u0077\u0070\u0068\u006f\u006e\u0065\u0035

select * from test where match(content) against('"\\u0070\\u0068\\u006f\\u006e\\u0065"' IN BOOLEAN MODE)
输出
1 \u0069\u0070\u0068\u006f\u006e\u0065
2 \u0069\u0070\u0068\u006f\u006e\u0065\u0035
3 \u0077\u0070\u0068\u006f\u006e\u0065\u0035
再次 解决 即可得到想要的结果
1 iphone
2 iphone5
3 wphone5

最终问题:
1. 数据在入库时 相当示扩容了6位.
2. 当 字段长度不够被截断后,所存储的信息输出时会无法转码

mysql 全文模糊查找 便捷解决方案

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
模糊查找 再深入 应某位大哥要求 再次对 SQLite::query(...) 学习了一番 有点心得 不敢独吞 与大家
日常管理MySQL数据库,新建用户,新建数据库,查询表等, 除了熟悉的phpMyAdmin,还有一个挺便捷的
MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式
MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式
MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式
一、概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提
一、概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提
一、概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提
来自 公司内部最流行的数据库就是MySQL,而关于MySQL性能,我听过种种传说和流言。而对于数据库的性
EXCEL的VLOOKUP有模糊查找,如果最后是TRUE. 在数据透视表中,也可以实现的. 比较简单,要提醒的是,LAS
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号