首页 » LNMP »

lnmp安装MySQL中文索引插件mysqlcft提升wordpress搜索性能

wordpress网站做大了以后搜索是个头疼的事,
本人网站用的1CPU1G阿里云,数据打了以后lnmp负载一直很高,
春节没事就想着怎么优化下,瓶颈出在mysql,所以从源头来处理,mysql导致云主机负载高,主要是因为搜索时进行全表检索,优化的话创建全文索引是个方法之一,所以就想着用张宴以前写的MySQL中文索引插件mysqlcft

引用张宴的话

MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%和_开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很大。MySQL针对这一问题提供了一种全文索引解决方案,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索。但是,至今为止,MySQL对中文全文索引无法正确支持。

恰好自己wordpress网站的mysql统计显示61%的搜索都是SELECT语句。。。wordpress是个好程序,但是需要自己进行diy才能满足需求
lnmp安装MySQL中文索引插件mysqlcft提升wordpress搜索性能

下面就用这个插件来创建中文全文索引,试试效果,观察一段时间,不行的话再试试sphinx+插件WordPress Sphinx Search Plugin的方式

MySQL中文索引插件mysqlcft安装及使用
此文结合网文再经过自己实践进行了修改
环境为lnmp1.4
mysql版本为mysql Ver 14.14 Distrib 5.5.56, for Linux (x86_64) using readline 5.1

1.MySQL必须是动态编译安装的,以便加载动态链接库。如果是用的军哥lnmp一键包的话,都是动态编译安装的

2.编辑MySQL配置文件my.cnf,在[mysqld]段中加入ft_min_word_len=1(意为最小词所占字节数)

vi /etc/my.cnf

重新加载mysql配置

/etc/init.d/mysql reload


3.安装mysqlcft中文全文索引插件

先找个目录(没有的的话 根目录 mkdir tools) 下载mysqlcft中文索引插件,https://code.google.com/p/mysqlcft 有32位与64位可选
然后解压mysqlcft插件
32位https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/mysqlcft/mysqlcft-1.0.0-i386-bin.tar.gz
64位https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/mysqlcft/mysqlcft-1.0.0-x86_64-bin.tar.gz

4、从命令行登入MySQL服务器控制台

mysql -uroot -p -P3306 -h127.0.0.1

根据提示输入password
查看MySQL插件目录

Show variables like 'plugin_dir';

将解压后的mysqlcft.so文件复制到MySQL的插件目录下

cp mysqlcft.so /usr/local/mysql/lib/plugin/

5、再次登录mysql服务器控制台,安装mysqlcft.so插件

Install plugin mysqlcft soname 'mysqlcft.so';

查看mysqlcft.so插件是否安装成功

show plugins;

若安装成功应该是下面这样额
lnmp安装MySQL中文索引插件mysqlcft提升wordpress搜索性能

扩展:
卸载mysqlcft.so插件

uninstall plugin mysqlcft;

注意:卸载前请先删除使用mysqlcft建立的全文索引。

6、为已经存在的表添加mysqlcft中文全文索引
创建单列全文索引

alter ignore table 数据库名.表名 add fulltext index 全文索引名(字段名) with parser mysqlcft;

创建全文联合索引

alter ignore table 数据库名.表名 add fulltext index 全文联合索引名(字段名1,字段名2) with parser mysqlcft;

创建wordpress数据库全文索引示例
(1)为wordpress的wp_posts表创建post_content,post_title全文联合索引

alter ignore table 数据库名.wp_posts add fulltext index postsfulltextindex(post_content,post_title) with parser mysqlcft;

创建成功后返回内容

Query OK, 195150 rows affected (2 min 0.38 sec)
Records: 195150  Duplicates: 0  Warnings: 0

(2)为wordpress的wp_postmeta表创建meta_value单列全文索引

alter ignore table 数据库名.wp_postmeta add fulltext index postmetafulltextindex(meta_value) with parser mysqlcft;

创建成功后返回内容

Query OK, 732376 rows affected (3 min 44.61 sec)
Records: 732376  Duplicates: 0  Warnings: 0

(3)为wordpress的wp_comments表创建comment_content单列全文索引

alter ignore table 数据库名.wp_comments add fulltext index commentsfulltextindex(comment_content) with parser mysqlcft;

创建成功后返回内容

Query OK, 16070 rows affected (1.07 sec)
Records: 16070  Duplicates: 0  Warnings: 0

扩展:
重建mysqlcft中文全文索引(索引损坏时需要用到)

REPAIR TABLE 数据库名.表名 QUICK;

查询使用样例(这个还真不知道怎么用,wordpress的搜索功能使用的查询语句恐怕修改起来就要动核心的程序了,暂时没有搞,不知道查询实现的方式,只能祈求是这样的,观察吧,如果负载降下来了,说明还是有用的,没用的话,删除索引卸载插件,然后用sphinx方案吧。。。)

Select * from table where match(title) against(‘搜索词’ in Boolean mode);

7、退出mysql

mysql > quit;

本文标签:

相关文章推荐

转载请保留,转载自:老牛博客
原文地址 http://xiaohost.com/1799.html

发表评论