今天在和同事吃饭的时候,聊到他准备要参加搞手机的全文检索,随搜索了下mysql 的全文检索
-- 适百千万数据量以上的站内搜索,平民级的解决方案
环境:LINUX MYSQL4/5(5以上的版本直接可以在插件形式编译进MYSQL内)
使用MYSQL的朋友一定有这样的经历,那就是在检索中文的时候往往力不从心。使用LIKE的效率实在不敢恭维,而且对搜索的结果也不是很满意的。 很希望有一个完美的解决方案。但是事实的真相是残酷的。这个完美的方案可能让你绞尽脑汁还是两手空空。
今天我给大家带来的 MYSQL中文分词全文检索 可能会让您有一种相见恨晚的感觉。
下面开始讲解:
在猪肉还是7块多的时候,我在CU里闲逛。突然看到一个大板(HIGHTMAN)的帖子。(我不记得地址了-______-).
大致内容就是修改MYSQL的源码。加入中文分词功能。原理依据的是一个强大的中文词典。(详细可进该大牛主页hightman.cn查看)
所以我得声明一下。该功能的版权归HIGHTMAN大牛所有。本人不涉及版权问题。
可喜的是该牛的MYSQL修改版是在GPL发放的。所在大家不用担心(除非你想自己打磨-______-)。
好啰嗦啊,扯了大半天还没到正题。我也觉得我自己好啰嗦,黄金又涨价了,哎。牛奶都从46涨到了65一箱了。
----------------------OH YEAH SO HOT!----------------------------
开始:
cd/ /home/apps
wget http://www.hightman.cn/down/mysql-5.1.11-hi1.tgz
tar zxf mysql-5.1.11-hi1.tgz
cd mysql-5.1.11-hi1
#开始编译,加入分词插件
./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charsets=all --with-plugins=fthightman
make
make install
#你如果嫌麻烦也可以 make && make install 该过程比较漫长(取决于机器性能了)
#复制my.cnf到系统启动项
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
#增加mysql用户组
groupadd mysql
useradd -g mysql mysql
#初始化
cd /usr/local/mysql
bin/mysql_install_db --user=mysql |注:--user=mysql 初始化表并且规定用mysql用户
#设置给mysql和root用户设定访问权限 我们先进入mysql目录
cd /usr/local/mysql
chown -R root /usr/local/mysql |注:设定root能访问/usr/local/mysq
chown -R mysql /usr/local/mysql/var |注:设定mysql用户能访问/usr/local/mysql/var
chgrp -R mysql /usr/local/mysql |注:设定mysql组能够访问/usr/local/mysq
bin/mysqld_safe --user=mysql & |启动之
#设定开机就启动mysql,进入源码目录下
cd /usr/local/mysql/share/mysql
cp mysql.server /etc/init.d/mysql
cd /etc/rc3.d
ln -s ../init.d/mysql S85mysql
ln -s ../init.d/mysql K85mysql
cd /etc/rc5.d
ln -s ../init.d/mysql S85mysql
ln -s ../init.d/mysql K85mysql
cd ../init.d
chmod 755 mysql
#rc3.d rc5.d明白是怎么回事吧。不懂的自己补习去。
重启 mysqld 服务器
whereis mysql
/etc/init.d/mysql
service mysql
/etc/init.d/mysql start|stop|restart
#以下的情况我们假定您已经有了APCHE PHP环境。
开始:
注意。MYSQL默认的字符编码是GBK。所以在这里建的表最好也是GBK的UTF8的需要改一下MYSQL默认编码再进行如下操作
DATABASEB1
show databases;
use db1;
#DB1里有个表叫TABLE1
TABLE1 字段为:
aid
gid
uid
atitle
acontent
请注意。atitle,acontent 这两个里面放的是我们需要检索的内容。
下面建立全文索引 也就是FULLTEXT
alter table1 add fulltext ft_gbk(atitle,acontent) with parser hightman;
这样索引就建成了。
PHP查询语句为
select * from table1 where match(atitle,acontent) against('$keyword');
返回结果就跟普通一样引用就可以了。
值得一提的是速度非常快。
100万的数据通常检索不到0.5秒
http://hi.baidu.com/zhanglei_186/blog/item/55ded45408a2b25c574e0033.html
分享到:
相关推荐
深入浅出MySQL全文 MySQL 是一种关系型数据库管理系统,广泛应用于各种行业和领域。本资源将从基础篇开始,详细讲解 MySQL 的安装、配置、启动和关闭服务、SQL 基础等知识点。 MySQL 的安装与配置 MySQL 的安装是...
- MySQL全文检索有内置的停用词列表,这些词通常在搜索中被忽略。可以自定义停用词表。 - `ft_min_word_len`变量决定了被索引的最短单词长度,可调整以优化索引大小。 6. **全文检索优化**: - 可以通过`ALTER ...
MySQL全文检索是一种高效的数据搜索机制,它允许用户执行类似搜索引擎的查询,显著提高了在大量文本数据中寻找特定信息的速度。全文检索在MySQL中主要应用于MyISAM存储引擎,因为MyISAM支持对大表的数据快速读取,...
浅谈MySQL数据库在自动测试系统中的应用.pdf
而MySQL作为一个小型、快速的关系型数据库管理系统,其开源特性和良好的性能表现使得它在小型网站开发和应用中被广泛应用。 文章中提到,软件项目开发离不开数据库,尤其在B/S架构下的Web开发中,数据库的交互操作...
MySQL 数据库全文检索的实现方法 MySQL 是一种关系型数据库管理系统,广泛应用于各种 Web 应用程序中。随着数据量的增长,全文检索功能变得越来越重要。本文介绍了一种 MySQL 数据库全文检索的实现方法,基于 UTF-8...
在IT行业中,全文检索和高亮显示是两个重要的技术概念,尤其在信息检索、搜索引擎以及数据分析等领域广泛应用。这里我们将深入探讨这两个主题。 首先,我们来理解什么是全文检索。全文检索是一种从文档集合中查找...
自己对于MySQL体系结构的认知
MySQL全文搜索支持两种模式:标准模式和布尔模式。标准模式提供最自然的搜索体验,而布尔模式允许更复杂的查询构造,如排除特定词汇或要求必须出现的词汇。 全文索引的维护也很重要。随着数据的增加,定期重建索引...
MySQL数据库进行中文全文检索的模拟实现方法 ...本文通过Java语言实现了可以替代MySQL全文检索功能的方法,该方法可以解决MySQL对中文字符集的支持不够的问题,实现了对MySQL数据库进行模拟全文检索的功能。
本文主要介绍了一种针对海量天文数据的分布式MySQL锥形检索的研究方法,使用数据库中间件技术,通过分库分表的方式将数据存储到分布式数据库集群中,并通过动态索引工具建立伪球面索引,以此来满足锥形检索的需求。...
索引的建立对于MySOL的高效运行是很重要的,索引可以大大提高MvSOL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车拿汉语字典的目录页...
MySQL 实现中文全文检索的解决方案 在 MySQL 中,实现中文全文检索是一项挑战性的任务,因为 MySQL 不支持中文字符的全文检索。但是,我们可以通过一些 trick 和解决方案来实现中文全文检索。本文将讨论两种解决...
下面小编就为大家带来一篇浅谈mysql密码遗忘和登陆报错的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
【基于Sphinx+MySQL的千万级数据全文检索】的架构设计着重解决大数据量下的高效全文检索问题。Sphinx是一款源自俄罗斯的开源全文搜索引擎,它在处理海量数据时表现出极高的性能和可扩展性。在DELL PowerEdge 6850...
### 浅谈MYSQL中的索引优化 #### 一、MySQL中的索引与B+树 在MySQL数据库系统中,索引被广泛应用于提高数据检索的效率。索引本质上是一种数据结构,它允许用户快速定位数据库中的记录。在MySQL中,B+树是最常见的...
本文档旨在深入浅出 MySQL 数据库开发、优化与管理维护的知识点,涵盖了 MySQL 数据库开发的基本概念、优化技巧和管理维护方法。 数据库开发篇 在本篇中,我们将学习 MySQL 数据库开发的基础知识,包括数据类型、...