mysql5.6下innodb引擎支持中文全文搜索的解决办法

什么是全文索引?

这里先引入两个概念,结构化数据和非结构化数据。

结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 

非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。

全文检索的基本思路:将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。
这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。

mysql的全文索引是根据英文的特点来开发的,如英文“this is my mysql database”,英文可以根据空格和标点去分开每个单词,然后统计单词的位置,生词索引树。然而中文却没有这样的特点,只能利用sphinx或者lucence去利用词库,匹配出关键词,然后构建索引树,通过关键词索引树可以直接获取数据的id,然后用id去数据库进行查询,直接命中数据库的索引,提升查询效率。第三方的全文索引还可以统计关键词的次数,提供相关度查询等功能

MySQL支持在CHAR、VARCHAR、TEXT类型的列上定义全文索引

mysql 5.6.4之前只有Myisam支持,5.6.4之后则Myisaminnodb都支持,不过mysql中的全文索引目前只支持英文(不支持中文)

sphinx  这是英文的全文检索引擎

coreseek  这是支持中文词库的全文检索引擎

方法一:

windows下安装coreseek

1 下载coreseek安装包,安装包的文件如下图所示,本实例是coreseek4.1

链接:https://pan.baidu.com/s/1nNm1wRiYKwR0FRUiX4Efwg

2 进入到etc目录下,找到csrf_mysql.conf

对里面的配置进行相应修改

安装coreseek

d:/web/coreseek/bin/searchd --install --config d:/web/coreseek/etc/csft_mysql.conf  --servicename Coreseek

并启动 Coreseek 服务

sc start Coreseek

如要已启动服务,要更新索引

d:/web/coreseek/bin/indexer -c d:/web/coreseek/bin/coreseek.conf --all --rotate

3 打开cmd进入到coreseek所在目录,输入如下命令生成索引文件

.\bin\indexer.exe –c .\etc\csft_mysql.conf --all    

如下图所示你的索引就创建好了

4 coreseek的搜索服务打开 
输入以下命令 
.\bin\searchd.exe -c .\etc\csft_mysql.conf 
输入完毕如下图所示如果没出任何问题你的coreseek搜索服务就开启拉了

测试查询 

    输入    bin\search -c etc\csft_mysql.conf xxxx

    xxxx 为要查询的内容

    dos下最好只查询英文内容,因为dos下由于编码原因,不一定能查询出来。

    dos下的查询主要是起到测试的作用,真正的查询应该还是要通过调用API

5 这时可以看下etc目录下有没有如下图所示三个文件

6 让php操作coreseek 
打开coreseek 文件目录的api目录找到 sphinxapi.php文件复制到你的域名文件下 
我的环境是PHPStudy所有我放在WWW目录下我创建了一个sphinx文件夹里面放入如图所示的两个PHP文件 

Ses.php里面的内容:


SPH_MATCH_ALL匹配所有查询词(默认模式)
SPH_MATCH_ANY匹配查询词中的任意一个
SPH_MATCH_PHRASE将整个查询看作一个词组,要求按顺序完整匹配
SPH_MATCH_BOOLEAN将查询看作一个布尔表达式
SPH_MATCH_EXTENDED将查询看作一个Sphinx内部查询语言的表达式
SPH_MATCH_FULLSCAN使用完全扫描,忽略查询词汇

打印出的内容

说明:试验发现,用这种方法搜索只能搜索出词库中已经存在的数据,也就是如果搜索词在词库中没有,但在数据库中有数据是查不出来的。如:搜索“测试”,这个词在词库中存在,就可以搜索出来;但是搜索“测”,就搜不出来数据了。

方法二:

使用中文分词插件PHPAnalysis,在插入数据时将插入的数据分成一个个词语插入数据库,这样数据库的数据就会以空格相连,像英文一样了。如下图

说明:这是在mysql5.6版本下,因为5.6版本的innodb和MYISAM都是支持全文检索的,而5.6版本以下的innodb引擎是不支持全文检索的

卸载 coreseek

停止服务

sc stop Coreseek

卸载服务 sc delete Coreseek

发布了42 篇原创文章 · 获赞 10 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/huihuikuaipao_/article/details/87098350