安装部署
  
     1.Lamp环境准备
     2.下载支持中文的Sphinx ---> coreseek
     3.安装环境
         m4,gcc,gcc-c++,automake,libtool
     4.安装中文分词组件mmseg
         ##安装mmseg
         $ cd mmseg-3.2.14
         $ ./bootstrap    #输出的warning信息可以忽略,如果出现error则需要解决
         $ ./configure --prefix=/usr/local/mmseg3
         $ make && make install
      5.安装coreseek前准备
         依赖mysql及依赖库
             mysql-server
             mysql-devel
      6.安装coreseek
         $ cd csft-3.2.14 或者 cd csft-4.0.1 或者 cd csft-4.1
         $ sh buildconf.sh    #输出的warning信息可以忽略,如果出现error则需要解决
         $ ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql 
         $ make && make ins tall
   配置
  #
 # Minimal Sphinx configuration sample (clean, simple, functional)
 #
  source post
 {
     type                    = mysql
     sql_host                = localhost
     sql_user                = root
     sql_pass                =
     sql_db                    = test
     sql_port                = 3306    # optional, default is 3306
      #设置字符集
     sql_query_pre = set names utf8
     #设置数据来源
     sql_query= select id,title,content from post
      #sql_attr_uint            = group_id
     #sql_attr_timestamp        = date_added
      #提取具体数据
     sql_query_info_pre = set names utf8
     sql_query_info            = SELECT * FROM post WHERE id=$id
 }
  
 #配置索引
 index ind_post
 {
     source    = post
     path = /usr/local/coreseek/var/data/post
     docinfo        = extern
     
     #去除html标签
     html_strip = 1
     #完整的去除指定标签
     html_remove_elements = style,script
     #去除标签的时候,留下点东西
     html_index_attrs = img=title,alt; a=title,alt
     
     #设置索引字符集
     charset_type    = zh_cn.utf-8
     #设置词典
     charset_dictpath = /usr/local/mmseg3/etc/
 }
  
 indexer
 {
     mem_limit                = 32M
 }
  
 searchd
 {
     port                    = 9312
     log                        = /usr/local/coreseek/var/log/searchd.log
     query_log                = /usr/local/coreseek/var/log/query.log
     read_timeout            = 5
     max_children            = 30
     pid_file                = /usr/local/coreseek/var/log/searchd.pid
     max_matches                = 1000
     seamless_rotate            = 1
     preopen_indexes            = 0
     unlink_old                = 1
 }
   使用
  1.基本搜索
     开启服务接口
     /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
 2.处理高亮
      $opts = array(
         "before_match" => "<span style="color:red">",
         "after_match" => "</span>"
     );
      foreach($list as $key=>$val){
         $list[$key] = $sp->buildExcerpts($val,"ind_post",$keyword,$opts);
     }
      注意:处理后会变为索引数组
  3.设置匹配模式
     $sp->setMatchMode(SPH_MATCH_ANY);
  4.设置排序模式
     1.按照默认权重排序
         $sp->setSortMode(SPH_SORT_EXTENDED,"@weight desc");
      2.人工干预排序
         1.配置文件设置属性字段
             sql_attr_uint  = weight 
         2.重建索引
         3.排序
             $sp->setSortMode(SPH_SORT_EXTENDED,"weight desc @weight desc");
  ====================================
 #开启去除标签
     html_strip                              = 1
  #去除标签的时候留下的信息
     html_index_attrs                        = img=alt,title; a=title;
  #完整去除的标签
     html_remove_elements                    = style, script
  ====================================
 增量索引
     1.给数据库添加一张表,记录完整索引位置
         不管数据是否存在,没有就添加,存在就更新
         replace into sp_count(id,max_id) values(1,8);
         replace into sp_count(id,max_id) values(1,(select max(id) from post));
      2.修改主数据源
         #更新最大id
         sql_query_pre = replace into sp_count(id,max_id) values(1,(select max(id) from post));
         #将当前所有的数据做主索引
         sql_query = select id,title,content,weight from post where id <= (select max_id from sp_count where id = 1);
     3.添加增量数据源
         source postnew : post
         {
             sql_query_pre = set names utf8
             sql_query = select id,title,content,weight from post where id > (select max_id from sp_count where id = 1);
         }
     4.主索引不变,添加增量索引
         index ind_postnew : ind_post
         {
             source = postnew
             path = /usr/local/coreseek/var/data/postnew
         }
     5.结合操作系统的计划任务即可
         每天晚上4:30做主索引,每5分钟做增量索引
         30 4 * * * /usr/local/coreseek/bin/indexer ind_post --rotate
         */5 * * * * /usr/local/coreseek/bin/indexer ind_postnew --rotate
 ====================================
 更新词典词条
     1.编辑/usr/local/mmseg3/etc/unigram.txt   词典模板文件
     2. ../bin/mmseg -u unigram.txt  重新得到词典
     3.替换词典  mv unigram.txt.uni uni.lib
     4.重新创建索引
   具体代码
      <?php
     header("content-type:text/html;charset=utf-8");
      //包含类文件
     include "./sphinxapi.php";
      //接收关键字
     $keyword = $_GET["keyword"];
      //实例化sphinx对象
     $sp = new SphinxClient();
      //连接服务器
     $sp->setServer("127.0.0.1","9312");
      //设置匹配模式
     $sp->setMatchMode(SPH_MATCH_ANY);
      //执行搜索
     $result = $sp->query($keyword,"*");
      if($result["total"] == 0) exit("查无数据");
      //整理所有id
     $ids = join(",",array_keys($result["matches"]));
      //连接数据库查数据
     $dsn = "mysql:host=localhost;dbname=test";
     $pdo = new PDO($dsn,"root","");
      $sql = "set names utf8";
     $pdo->query($sql);
      $sql = "select * from post where id in ({$ids})";
      //最终结果
     $data = $pdo->query($sql)->fetchAll(2);
      $opts = array(
         "before_match" => "<span style="color:red">",
         "after_match"=> "</span>"
     );
     //处理结果
     foreach($data as $key=>$val){
        $data[$key] = $sp->buildExcerpts($val,"ind_post",$keyword,$opts);
     }
 ?>