• 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

     

     

  • 相关阅读:
    高精度 模板
    《图论》邻接表
    模板整理
    H
    C
    同余定理的应用(处理大数
    H
    1153: 简易版最长序列
    1152: 二分搜索
    1151: 大整数加法(正数)
  • 原文地址:https://www.cnblogs.com/xuejie/p/2800212.html
Copyright © 2020-2023  润新知