sphinx mysql5.7_CentOS7下安装Sphinx 中文分词【PHP+MySQL】

前言

Mysql 的搜索,只能很简单的like '%无道%',那显然是远远不够的。只能找第三方的服务。

最终选择了Sphinx

阅读本文需要:

1、知道Linux的基本命令

2、知道Linux的基本命令

3、稍微熟悉Linux

因为中间可能有些步骤我写错了,或者就少了那么简单的一步,你就不知道怎么回事了。。

并且,这是需要服务器的,撰写此文是CentOS,虚拟机基本只能用like '%无道%'

下载&&安装

下载

解压

并改名为sphinx,然后移动到/usr/local

51b87862b938da4e30598c5d8d474086.png

并进入到/usr/lcoal/sphinx

d2a23399c1b5ac6bfab1559581883930.png

在此目录下创建data,log文件夹

在/usr/local/sphinx/etc 编写 sphinx.conf 配置文件

该目录下有三个文件,

3dd11e920e4841e4d27f9530c7fc3304.png

我们需要将sphinx.conf.dist复制并重命名为sphinx.conf

610d4cb6a9910e15f9f4b33349eb794e.png

然后边距sphinx.conf文件:

此文件是需要填写一些配置(包括数据库信息的配置,索引的一些配置)等等。

不过我是看他中文写得我头都大了。

样例让如下(删除注释了):

A.

以上就是数据库的配置,包括host,user,pass,db,port。

值得说的是:sql_query 是你要查询的字段,也就是一段select语句,注意着语句要包括主键!

B.

这个是索引,其中source的值和上面A 的命名的src1对应,

path就是存放索引的位置,建议就是我们最之前建立的data文件夹下,

C.

这个就是索引器的配置,也即索引时所使用的最大内容

D.

这个可以理解成接口的一些配置信息(这样说不对),

反正就是需要配置好了之后,接口才能使用。

listen:监听端口

然后就是日志存放路径,如果之前建立了data和Log文件夹,那么以上配置基本是现成的,也即log文件夹里面。

注意,以上A.B.C.D虽然我是分开展示出来的,但是他们都是在sphinx.conf文件里面的。

执行生成索引文件的命令:

66d1d60df9e243dce384fd18c2ad886a.png

/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test1 --rotate #重新生成索引的命令

运行sphinx

/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf

/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf --stop关闭sphinx命令

e5c02585cd95f6b617af045fe29f277e.png

使用

进入api文件夹/usr/local/sphinx/api,将sphinxapi.php复制到你的PHP目录里面。这是相当于sdk的文件,需要引用它。

daa23487a6225a5ee5d746ec89c24df6.png

编写测试代码:

1e1998610d33dc384b311c950edb3d50.png

如图所示,返回的是id,该id是你的表的主键。

每当数据库变动时,需要重新执行索引,不然搜索只会是以前的数据。【重要事情说三遍】

每当数据库变动时,需要重新执行索引,不然搜索只会是以前的数据。【重要事情说三遍】

每当数据库变动时,需要重新执行索引,不然搜索只会是以前的数据。【重要事情说三遍】

参考文章

国内环境就是这样,很多文章都过时、互相抄袭,再加上百度....,要查很多文章才能明白。

你还得带着批判的思想去按照他说的做,不然光按照他说的做,很可能有错误。【当然,不一定是文章的锅,还有可能是软件版本的更新问题。】

完整配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
含有3种切分方法 getWord 长度优先切分 。最快 getShortWord 细粒度切分。比最快慢一点点 getAutoWord 自动切分 (在相邻词做了递归) 。效果最好 可自定义词典,自己添加词语到词库,词库支持文本格式json和二级制格式igb 二进制格式词典小,加载快 dict.igb含有175662个词,欢迎大家补充词语到 dict.txt ,格式(词语 \t idf \t 词性) idf 获取方法 百度搜索这个词语 Math.log(100000001/结果数量),如果你有更好的方法欢迎补充。 词性 [标点符号,名词,动词,形容词,区别词,代词,数词,量词,副词,介词,连词,助词,语气词,拟声词,叹词] 取index ;标点符号取0 三种分词结果对比 $fc = new VicWord('igb'); $arr = $fc->getWord('北京大学生喝进口红酒,在北京大学生活区喝进口红酒'); //北京大学|生喝|进口|红酒|,|在|北京大学|生活区|喝|进口|红酒 //$arr 是一个数组 每个单元的结构[词语,词语位置,词性,这个词语是否包含在词典中] 这里只值列出了词语 $arr = $fc->getShortWord('北京大学生喝进口红酒,在北京大学生活区喝进口红酒'); //北京|大学|生喝|进口|红酒|,|在|北京|大学|生活|区喝|进口|红酒 $arr = $fc->getAutoWord('北京大学生喝进口红酒,在北京大学生活区喝进口红酒'); //北京|大学生|喝|进口|红酒|,|在|北京大学|生活区|喝|进口|红酒 //对比 //qq的分词和百度的分词 http://nlp.qq.com/semantic.cgi#page2 http://ai.baidu.com/tech/nlp/lexical 分词速度 机器阿里云 Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz getWord 每秒140w字 getShortWord 每秒138w字 getAutoWord 每秒40w字 测试文本在百度百科拷贝的一段5000字的文本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值