PHP读取sphinx实例
阅读原文:http://yzswyl.cn/blread-1611.html
1.未采用mysql二进制网络协议的代码:
//检查sphinx是否能连接,不能重试两次,能则连接,不用mysql协议,仅供参考 function checkSphinxNoMysql() { $flag = true; $retries = 0; while ( $flag && $retries < 2 ) { $s = new SphinxClient (); $s ->setServer ( $_ENV [ 'db_host' ], $_ENV [ 'current_sphinx_port' ] ); if (! $s ->open ()) { //此处为如果连接不上就更改配置文件,根据项目需要来写 //global $configDefault; //updateConfig ( $configDefault ); $retries ++; } else { $flag = false; break ; } } return $s ; if ( $retries >= 2) { //sendemail or not return false; } } $order_column = 'id DESC,time DESC' ; //排序规则 //$s = checkSphinx (); $s = new SphinxClient (); $s ->setServer ( 'sphinx_host' , 'sphinx_port' ); //以上两句代码亦可使用$s = checkSphinx ();来代替 $indexname = "page_keyword" ; //索引名字 $s ->setMatchMode ( SPH_MATCH_PHRASE ); $s ->SetSortMode ( SPH_SORT_EXTENDED, $order_column ); $s ->setMaxQueryTime ( 100000 ); $s ->setLimits ( 0, $limit_total , $limit_total ); $keyword_sphinx = iconv ( "gbk" , "utf-8" , $keyword ); $result = $s ->query ( $keyword_sphinx , $indexname ); $s ->close (); if ( $result [ 'total' ] > 0) { var_dump( $result [ 'matches' ]); //根据打印出的结果进行相应的读取 } |
2.采用mysql二进制网络协议的代码:
//检查sphinx是否能连接,不能重试两次,能则连接,用mysql14协议 protected function checkSphinx() { $flag = true; $retries = 0; while ( $flag && $retries < 2 ) { $conn = mysql_connect ( "{$_ENV ['db_host']}:{$_ENV ['current_sphinx_port']}" ); if (! $conn ) { //此处为如果连接不上就更改配置文件,根据项目需要来写 //global $configDefault; //updateConfig ( $configDefault ); $retries ++; } else { $flag = false; break ; } } if ( $retries >= 2) { die ( "Please contact with administrator." ); } return $conn ; } $order_column = 'id DESC,time DESC' ; //排序规则 $conn = mysql_connect ( "sphinx_host:sphinx_port" ); //以上代码亦可使用$conn = checkSphinx ();来代替 if (! $conn ) { return - 1; //连接不上返回状态 } $keyword_sphinx = iconv ( "gbk" , "utf-8" , $keyword ); //keyword为索引名字 $sql = "select * from keyword where match('{$keyword_sphinx}') order by {$order_column} limit {$limit_total} option max_matches={$limit_total}" ; $result = @mysql_query ( $sql , $conn ); $i = 0; while ( ( $row = mysql_fetch_array ( $result )) !== false ) { var_dump( $row ); //根据打印出的结果进行相应的读取 } $totals = $this ->getTotalFound ( $conn ); //获取总记录个数 |
如何获取总记录个数参考:sphinxql如何得到结果数?show meta的详细说明?
关于开启mysql二进制网络协议参考:Sphinx/MySQL 协议支持与SphinxQL
此博客已不再更新,如需查看最新文章请访问雪洁之家
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构