zoukankan      html  css  js  c++  java
  • sphinx关键字套红

        sphinx定义搜索结果,搜索的内容着重显示,可以使用下面代码

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: pc00001
     5  * Date: 2015/4/10
     6  * Time: 14:18
     7  */
     8 header('Content-type:text/html;charset=utf-8');
     9 include_once('sphinxapi.php');
    10 
    11 $sp = new SphinxClient();
    12 
    13 $sp ->SetServer('127.0.0.1',9312);  //server连接
    14 $sp ->SetConnectTimeout(5); //超时时间
    15 $sp ->SetLimits(0,10);  //取出条数
    16 
    17 $keywords = isset($_REQUEST['ky'])?$_REQUEST['ky']:'新款';
    18 
    19 $res = $sp ->Query($keywords,'*');
    20 
    21 
    22 $res_id = (implode(',',array_keys($res['matches'])));
    23 
    24 $conn= mysql_connect('127.0.0.1','root','');
    25 mysql_query('set names utf8');
    26 mysql_query('use ldds');
    27 $sql = "select*from ld_goods where goods_id in ($res_id)";
    28 $tmp = mysql_query($sql,$conn);
    29 
    30 $query_res = array();
    31 while($row = mysql_fetch_assoc($tmp)){
    32     $query_res[] = $row;
    33 }
    34 
    35 
    36 $goods_name = array();
    37 $res = array();
    38 //定义关键字标注内容
    39 $build_opts = array(
    40     'before_match'=>"<font color='red'>",   //在关键字之前添加的html
    41     'after_match'=> '</font>'          //在关键字之后添加的html
    42 );
    43 
    44 
    45 foreach($query_res as $k=>$v){
    46     $goods_name[$k] = $v['goods_name'];
    47 }
    48 
    49 //参数分别是 (需要标注的内容,索引名称,关键字,定义关键字设置数组)
    50 $res = $sp -> BuildExcerpts($goods_name,'mysql',$keywords,$build_opts);
    51 print_r($res);
    52 //var_dump($goods_name);exit;

    结果显示类似下面内容

    [0] => 正品 2014春装新款 女 绣花针织衫 开衫外套浮桑初 蓝色 [1] => 正品 2014春装新款 女 绣花针织衫 开衫外套浮桑初 绿色 

    其他常用方法

    其他Sphinxapi中常用方法 1
    
          $sp -> SetMatchMode(          );
         SPH_MATCH_ALL, 匹配所有查询词(默认模式)
         SPH_MATCH_ANY, 匹配查询词中的任意一个
        SPH_MATCH_PHRASE, 将整个查询看作一个词组,要求按顺序完整匹配
        SPH_MATCH_BOOLEAN, 将查询看作一个布尔表达式  (实现不包含关键词的搜索)
         SPH_MATCH_EXTENDED, 将查询看作一个Sphinx内部查询语言的表达式
    
          $sp->SetFilterRange ( $attribute, $min, $max, $exclude=false );
          添加新的整数范围过滤器
              $sp->SetFilterRange (‘dateline’,time()-3600,time());//查询某个时间段
    
          $sp->SetFilter ( $attribute, $values, $exclude=false );//查询指定字段为value,如通过uid查
                         增加整数值过滤器。
    
          $sp->SetSortMode ( $mode, $sortby=“” ) ;
                         设置匹配项的排序模式,6种模式
                      SPH_SORT_EXPR 模式,按某个算术表达式排序。
               $uptime = time() - 60*60*24*60;
               $sp->SetSortMode(SPH_SORT_EXPR, "@weight + IF(dateline > $uptime,1,0)“)

        $sp->SetFieldWeights ( $weights );//按字段名称设置字段的权值

               if (!$is_bytitle) {

      $weight = array(

      'title'=> 10,'content'=> 100,

      );

               } else {

      $weight = array(

      'title'=> 100,'content'=> 10,

                                        );

               }

               $sp->SetFieldWeights($weights); // 适用于按标题搜索,或者按内容搜索

            $sp->SetFilterFloatRange( $attribute, $min, $max, $exclude=false );

                  增加新的浮点数范围过滤器。使用方法类似于整型过滤

    注意:使用这些方法,需要将数据所在字段的内容加入到索引中。如配置文件中:

        sql_attr_uint  = click

        sql_attr_timestamp      = dateline

        另外这些方法必须在Query()方法执行前执行。

  • 相关阅读:
    MYSQL数据库基础
    MSYQL操数据DML
    MYSQL外键约束
    MYSQL多表查询
    MYSQL结果排序、分页查询、聚合函数
    未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项”的解决方法
    由于扩展配置问题而无法提供您请求的页面。
    JS中的prototype(转载)
    mvc表单如何绑定bool类型的属性或变量
    使用c#正则验证关键字并找出匹配项
  • 原文地址:https://www.cnblogs.com/gophper/p/4419094.html
Copyright © 2011-2022 走看看