sphinx下BuildExcerpts的使用

使用sphinx:

$this->load->library("Sphinxclient",'',"sphinx");
$this->sphinx->SetServer ('127.0.0.1', 9312);
$this->sphinx->SetConnectTimeout(1);
$this->sphinx->SetArrayResult(true);

$this->sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
$this->sphinx->SetLimits($page,$perpage);
$res = $this->sphinx->Query("\"{$tag}\"/2", "sell");

//具体步骤省略

//假如我只想让tags_name相关部分高亮

$opts = array(
 'before_match' => '<b style="color:red">',
 'after_match'  => '</b>',
 'chunk_separator' => '...',
 'limit'    => 60,
 'around'   => 3,
);

//......

$result = mysql_query($sql);
 
 $tags = array();
 $tags_name = array();//需要变色的那一列
 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
 {
  $tags[] = $row;

  $tags_name[] = $row['tags_name'];
 }
 $tags_name = $s->BuildExcerpts($tags_name, 'index名字', '搜索的词', $opts);//执行高亮,这里索引名字千万不能用*

 foreach($tags as $k=>$v)
 {
  $tags[$k]['tags_name'] = $tags_name[$k];//高亮后覆盖

 }
 foreach($tags as $k=>$v)
 {
  echo $v['tags_id'].':'.$v['tags_name'].'<br/>';
 }

 

总结,估计是sphinx2中对BuildExcerpts进行了优化,第一个参数变成了数组,一直报错1293行,查看sphinxapi.php才发现下边这行代码:

assert ( is_array($docs) );

 

其实我还是觉得这个高亮的部分自己写一个function代替也差不多。

 function searchResult($search,$productName)//搜索的词,产品名字
 {
  $arr_p1 = explode(" ",$productName);
 
  $arr_s2 = explode(" ",strtolower($search));
  $arr_p2 = explode(" ",strtolower($productName));
  $len_p2 = count($arr_p2);
  for($i=0;$i<$len_p2;$i++)
  {
   if(in_array($arr_p2[$i],$arr_s2))
    $arr_p1[$i] = '<font color="#ff0000">'.$arr_p1[$i].'</font>';
  }
  return implode(" ",$arr_p1);
 }

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云尔Websites

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值