安装。环境:win7 64位
1、下载sphinx文件包
下载地址:http://sphinxsearch.com/downloads/archive/
2、解压到D:/sphinx。新建文件夹data 和 log,在本地test库中,导入example.sql文件。结构如下
3、配置 复制sphinx.conf.in文件到bin目录下。重命名为sphinx.conf。配置内容如下。每一行代表什么意思,目前我也说不清楚,后续吧...
注意两点:红色为我修改过的内容,黄底的地方,命名需要一致。
# 配置数据源source src1{ ???type ???????????= mysql ???sql_host ???????= localhsot ???sql_user ???????= root ???sql_pass ???????= ????sql_db ?????????= test ???sql_port ???????= 3306 ???????sql_query_pre ???= SET NAMES utf8 ???sql_query ???????= SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content ????????FROM documents ???sql_attr_uint ???????= group_id ???sql_attr_timestamp ???= date_added ???sql_ranged_throttle ???= 0}source src1throttled : src1{ ???sql_ranged_throttle ???= 100}# 配置数据源生成的索引文件存放的位置index test1{ ???source ???????????= src1 ???path ???????????= D:/sphinx/data/test1 # 注意此处包含生成的文件路径和名称。会在data目录下生成test1.***格式的文件 ???charset_table ????= 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F ???docinfo ???????????= extern ???dict ???????????= keywords ???mlock ???????????= 0 ???morphology ???????= none ???min_word_len ???= 1 ???ngram_len ???????= 1 ???ngram_chars ???????= U+3000..U+2FA1F ???html_strip ???????= 0} indexer{ ???mem_limit ???????= 128M}# 配置Sphinx服务器的信息searchd{ ???listen ???????????= 9312 ???listen ???????????= 9306:mysql41 ???log ???????????????= D:/sphinx/log/searchd.log ???query_log ???????= D:/sphinx/log/query.log ???read_timeout ???????= 5 ???client_timeout ???????= 300 ???max_children ???????= 30 ???persistent_connections_limit ???= 30 ???pid_file ???????????= D:/sphinx/log/searchd.pid ???preopen_indexes ???????= 1 ???unlink_old ???????????= 1 ???mva_updates_pool ???= 1M ???max_packet_size ???????= 8M ???max_filters ???????????= 256 ???max_filter_values ???= 4096 ???max_batch_queries ???= 32 ???workers ???????????????= threads
# windows下启动searchd服务一定要注释掉这个
# seamless_rotate = 1
}
4、建立索引
indexer.exe test1
5、启动服务
searchd.exe --pidfile
或者
searchd
也可以制作成.bat文件,方便快速启动。新建文件“测试.bat”,用文本编辑器打开,写入如下内容。可以根据自己环境,自行修改。双击即可启动sphinx
@echo off d: cd\sphinx/binsearchd
6、如果需要关闭服务,直接关闭DOC窗口
7、(拓展)php安装sphinx拓展就大概说一下。也可以不安装拓展,代码中引入文件即可
require(‘sphinxapi.php‘);
ext下加入dll文件
下载地址:http://pecl.php.net/package/sphinx
php.ini下配置。重启apache
extension=php_sphinx.dll
到此配置结束。
测试用例1。输出符合搜索关键词的ID
<?php
# 如果php中安装了sphinx.dll拓展,则不需要这一行代码
require(‘sphinxapi.php‘);
$keyword = ‘test‘;$sphinx = new SphinxClient;$sphinx->setServer("localhost", 9312);$sphinx->setMatchMode(SPH_MATCH_ANY); ??//匹配模式 ANY为关键词自动拆词,ALL为不拆词匹配(完全匹配)$sphinx->SetArrayResult ( true ); ???//返回的结果集为数组$result = $sphinx->query($keyword,"test1"); ???//星号为所有索引源$count=$result[‘total‘]; ???????//查到的结果条数$time=$result[‘time‘]; ???????????//耗时$arr=$result[‘matches‘]; ???????//结果集$id=‘‘;for($i=0;$i<$count;$i++){ ???$id.=$arr[$i][‘id‘].‘,‘;}$id=substr($id,0,-1); ???????????//结果集的id字符串echo $id;
结果展示:
测试用例2。符合搜索关键词高亮
<?php# 如果php中安装了sphinx.dll拓展,则不需要这一行代码
require(‘sphinxapi.php‘);$keyword = ‘test‘;$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,‘test‘);$sql = "select * from documents where id in (".$ids.")";$rst = mysqli_query($conn,$sql);//给匹配关键字添加样式$opts = array( ???‘before_match‘=>‘<font style="font-weight:bold;color:#f00;">‘, ???‘after_match‘=>‘</font>‘);echo ‘<pre>‘;while($row = mysqli_fetch_assoc($rst)){ ???$row2 = $sphinx->buildExcerpts($row,‘test1‘,$keyword,$opts);//test1 配置文件中的主数据源索引 ???print_r($row2);}
结果展示
PHP搜索优化 sphinx
原文地址:https://www.cnblogs.com/qq917937712/p/8920506.html