Listening to the Words

windows下sphinx的安装与配置

在unbuntu的环境下安装成功并测试了sphinx,安装php的sphinx扩展时遇到了问题,sphinx官方发布的扩展包并不支持php7.1

# sudo pecl install sphinx
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
pecl/sphinx requires PHP (version >= 5.2.2, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.1.14-1+ubuntu16.04.1+deb.sury.org+

官网暂时只支持到5.6,因此需要注意使用的PHP版本

windows环境下安装sphinx

Sphinx下载地址 http://sphinxsearch.com/downloads/release/ 这里根据自己的情况选择相应的版本下载即可

1.我下载的是sphinx-2.3.2-beta-pgsql-x64-bin,将下载的文件解压,解压后文件夹重命名为sphinx(方便操作)

2.将以下文件放到指定位置,并且重命名为sphinx.conf
《windows下sphinx的安装与配置》

《windows下sphinx的安装与配置》

3.配置sphnix.conf,这里根据自己的情况进行配置即可,以下配置项若前面有‘#’注释的,将‘#’去掉,下同

type = mysql 
sql_host = localhost 
sql_user = root  //数据库用户
sql_pass =root  //数据库密码
sql_db = test  //数据库名称
sql_port = 3306 
sql_query_pre = SET NAMES utf-8 

4.修改sphinx.conf文件的index test1配置

#存放索引的目录
path
= F:/sphinx/data/
#添加utf-8编码表
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
#简单分词,搜索中文必须设置为1(只有0和1两个选项)
ngram_len = 1 
# 需要分词的字符,搜索中文时必须
ngram_chars = U+3000..U+2FA1F 
#指定以下三个文件路径
pid_file=F:/sphinx/log/searchd.pid
log=F:/sphinx/log/searchd.log
query_log=F:/sphinx/log/query.log

5.导入数据,控制台下输入命令 mysql -uroot test <F:/sphinx/example.sql,执行成功后在tes表中中会新增两个表documents和tags

6.打开cmd窗口,进入目录F:\sphinx\bin

7.建立索引,执行indexer.exe test1

8.搜索关键字test(test是导入的documents表中已经存在的关键字),执行命令searchd.exe –pidfile,出现如下图所示界面表示sphinx服务启动成功,关闭该窗口,sphinx服务就停止运行,若要在cmd执行其他操作,可重新开一个

《windows下sphinx的安装与配置》

php安装扩展

.PHP中调用Sphinx有两种方式

方式一:使用Sphinx官方提供的api文档,引入即可include ‘sphinxapi.php’;

方式二:

(1)在这里 https://pecl.php.net/package/sphinx/1.3.2/windows 下载Sphinx模块(根据自身环境选择相应版本,可以通过phpinfo进行查看,如下图所示)

(2)下载后解压,并将解压得到的php_sphinx.dll文件放到php的ext目录下

(3)修改php.ini文件(根据上面phpinfo中的Loaded Configuration File一栏找的php.ini的位置),添加一行extension=php_sphinx.dll

(4)再次查看phpinfo,出现sphinx扩展(如下图),表示安装成功,可以使用了

《windows下sphinx的安装与配置》

3.使用,代码如下

<?php
$keyword = $_POST['keyword'];
//$keyword = '航母';
$sphinx = new SphinxClient();
$sphinx->SetServer('localhost',9312);
$sphinx->setMatchMode(SPH_MATCH_ANY);//匹配模式 SPH_MATCH_ALL:完全匹配
$result = $sphinx->query($keyword,'*');//*表示在所有索引里面进行搜索
$ids = implode(',',array_keys($result['matches']));

$conn = mysqli_connect('localhost','root','');
mysqli_query($conn,'set names utf8');
mysqli_select_db($conn,'blog');

$sql = "select * from blog_articles where id in (".$ids.")";
$rst = mysqli_query($conn,$sql);
//给匹配关键字添加样式
$opts = array(
'before_match'=>'<font style="font-weight:bold;color:#f00;">',
'after_match'=>'</font>'
);
echo '

';
while($row = mysqli_fetch_assoc($rst)){
$row2 = $sphinx->buildExcerpts($row,'test1',$keyword,$opts);//test1 配置文件中的主数据源索引
print_r($row2);

}
echo '

';
?>

点赞