环境:win7 64 wamp
解压sphinx安装包后,简历如下结构。注意,conf目录是我的配置文件目录
在conf目录下,简历newdefend.conf文件,配置内容如下
# 配置数据源source domain_src{ ???type ???????????= mysql ???sql_host ???????= 192.168.185.210 ???sql_user ???????= root ???sql_pass ???????= ???sql_db ???????????= mydb ???sql_port ???????= 3306 ???????????sql_ranged_throttle ???= 0 ???sql_query_pre ???????= SET NAMES utf8 ???# sql_query_pre ??????= SET SESSION query_cache_type=OFF ???sql_query_pre ????????= REPLACE INTO sph_counter SELECT 1, MAX(id) FROM domain
# 注意这个地方,至少要有各自字段没有定义成sql_attr_***,好像是需要有一个字段是全文索引什么的。反正多查询一个字段就对了。或者定义一个sql_field_string也可以 ???sql_query ???????????= SELECT id,uid,type,package_level,ct,domain FROM domain ????????WHERE id<=( SELECT max_id FROM sph_counter WHERE counter_id = 1 ) ????sql_attr_uint ???????= uid ???sql_attr_uint ???????= type ???sql_attr_uint ???????= package_level ???# sql_field_string ???????= ct ???sql_attr_timestamp ???= ct}# 配置增量数据源source delta_domain_src:domain_src{ ???sql_ranged_throttle = 100 ???sql_query_pre ??????= SET NAMES utf8 ???# sql_query_pre ??????= SET SESSION query_cache_type=OFF ???sql_query ???????????= SELECT id,uid,type,package_level,ct,domain FROM domain ????????WHERE id>( SELECT max_id FROM sph_counter WHERE counter_id = 1 ) } # 索引index domain_suggest{ ???source ???????????= domain_src ???path ???????????= D:/sphinx/data/domain_suggest ???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}# 增量索引index delta_domain_suggest:domain_suggest { ???source ????????????= delta_domain_src ???path ???????????= D:/sphinx/data/delta_domain_suggest}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 ????# 开启sphinx服务时,会生成几个log文件,这里配置文件生成目录。默认会生成在searchd.exe同级目录下 ???binlog_path ??????= D:/sphinx/log/}
定义一个启动sphinx的脚本“sphinx重启.bat”。脚本内容如下,双击启动
@echo off ::停止sphinx服务d:/sphinx/bin/searchd --stop::建立配置文件中所有索引(也可以建立某个索引)d:/sphinx/bin/indexer -c d:/sphinx/conf/newdefend.conf --all::启动sphinx服务d:/sphinx/bin/searchd -c d:/sphinx/conf/newdefend.conf::窗口不要关闭pause
启动成功界面
测试代码
$keyword = ‘‘;$sphinx = new SphinxClient;$sphinx->setServer("localhost", 9312);$sphinx->setMatchMode(SPH_MATCH_ALL); ??//匹配模式 ANY为关键词自动拆词,ALL为不拆词匹配(完全匹配)$sphinx->SetArrayResult ( true ); ???//返回的结果集为数组$result = $sphinx->query($keyword,"domain_suggest delta_domain_suggest"); ???//星号为所有索引源$count=$result[‘total‘]; ???????//查到的结果条数$time=$result[‘time‘]; ???????????//耗时$arr=$result[‘matches‘]; ???????//结果集$id=‘‘;foreach($arr as $i => $val){ ???$id.=$arr[$i][‘id‘].‘,‘;}$id=substr($id,0,-1); ???????????//结果集的id字符串echo $id;
运行结果
PHP搜索优化 sphinx 实战
原文地址:https://www.cnblogs.com/qq917937712/p/8930833.html