php--sphinx的使用

sphinx安装,配置,使用,分页

  1. Sphinx简介

 

SQL   结构化查询语言(是一种标准,所有的关系型数据库Mysql,sqlserver,oracle)

sphinx的使用两种方式:

 

第一种:  使用sphinxAPI来操作sphinx   (常用)   

 sphinx可以使用API,也可以将api编译到PHP中做为扩展

第二种:  使用mysqlsphinx的存储引擎

 

sphinx  这是英文的全文检索引擎

coreseek  这是支持中文词库的全文检索引擎

 

区别:

英文的文章 怎么能区分哪个词    以空格来区分词的

中文的文章 我爱北京天安门      中文词库

 

使用sphinx的步骤:

 

2sphinx配置(配置文件 csft_mysql.conf)

   配置文件格式

1、数据源定义 (指向你数据的来源 ,通常是mysql)

    2、索引 (索引的一些配置信息)

    3indexer  (内用的内存---基本不需要设置)

4searchd  (服务器的一些配置---

 

   注意:

1、一个配置文件可以配置多个数据源和索引 ((1,2),(1,2),nnnn

2sql_query  主查询(把数据库表中的哪些字段查询出来--根据你页面的搜索条件)

              select 第一个字段(一定是主键)

 

3. sphinx安装

① cd E:/usr/local/coreseek-3.2.14-win32

② indexer.exe -c 配置文件 --all(参数--all 表示创建全部索引)

.\bin\indexer.exe -c .\etc\csft_mysql.conf --all

③ 启动searchd 服务  searchd.exe -c 配置文件

.\bin\searchd.exe -c .\etc\csft_mysql.conf  如果启动服务出现1067错误后 查看配置文件 和配置文件的文字编码

④ php 操作sphinx

 

  1. Sphinx 的使用

use SphinxClient;

/*引入sphinx*/

Yii::$classMap['SphinxClient']="@vendor/sphinx/sphinxapi.php";

//简单使用sphinx

$cl = new SphinxClient ();

$cl->SetServer ( '127.0.0.1', 9312);

$cl->SetMatchMode ( SPH_MATCH_ALL); //匹配格式  任意匹配

SPH_MATCH_ALL匹配所有查询词(默认模式)
SPH_MATCH_ANY匹配查询词中的任意一个
SPH_MATCH_PHRASE将整个查询看作一个词组,要求按顺序完整匹配
SPH_MATCH_BOOLEAN将查询看作一个布尔表达式
SPH_MATCH_EXTENDED将查询看作一个Sphinx内部查询语言的表达式
SPH_MATCH_FULLSCAN使用完全扫描,忽略查询词汇
SPH_MATCH_EXTENDED2类似 SPH_MATCH_EXTENDED ,并支持评分和权重.

        $cl->SetArrayResult ( true );  //作为数组返回

        $cl->SetMaxQueryTime(10); //设置最大搜索时长

        //$cl->SetFilter('cat_id', array(1));//过滤条件

        $cl->setSortMode(SPH_SORT_EXTENDED,'@id desc'); //排序

 //$res=$cl->Query ( $req, "*" ); //执行搜索

        $res=$cl->Query($req, '*');//搜索全部

  1. Sphinx 标红

$opt=array("before_match"=>"<font style='font-weight:bold;color:#f00'>","after_match"=>"</font>");

        //这里为sphinx高亮显示

        foreach($data_arr as $k=>$v){

            $rows = $cl->buildExcerpts($v,"mysql",$req,$opt);

            $model_arr[$k]['id']=$rows[0];

            $model_arr[$k]['name']=$rows[1];

            $model_arr[$k]['cat_id']=$rows[2];

 

        }

【注意】:

语法:public array SphinxClient::buildExcerpts ( array $docs , string $index , string $words [, array $opt ] )

 

可以有四个参数,前三个为必须

array $docs        即从数据库取出来的结果数组(fetch_assoc),本实例为 $row

string $Index      即我们在csft_mysql.conf 配置的索引名,本实例为 news

string $words     搜索的关键词,本实例为 $keyword

 

可选参数 array $opts:它是一个索引数组,你可以定义其中的一些单元,

 

posted @ 2016-03-29 15:39  不解凡忧  Views(501)  Comments(0Edit  收藏  举报