php实现搜索类封装示例


Posted in PHP onMarch 31, 2016

本文为大家分享了php实现搜索类封装示例,供大家参考,具体内容如下

<?php
/**
 * SoClass.php
 * 索引与搜索类 */
 
class SoClass {
 
  private $_xindex;
 
  private $_xsearch;
 
  private $_project;
 
  public function __construct($project){
 
    //载入引导文件
    require_once 'lib/XS.php';
    //初始化
    $xs = new XS($project); 
    $this->_project = $project;
    $this->_xindex = $xs->index; 
    $this->_xsearch = $xs->search;
    $this->_xsearch->setCharset('UTF-8');
  }
 
  public function query($keyWord,$row=20,$jnum=0){
 
    $xs = new XS($this->_project);
    $xs->search->setFuzzy();
    $xs->search->setAutoSynonyms();
    $xs->search->setQuery($keyWord); //支持同义词搜索,默认打开
    $xs->search->setLimit($row, $jnum); //设置返回结果最多为 5 条,并跳过前 10 条
    $docs = $xs->search->search(); //执行搜索,将搜索结果文档保存在 $docs 数组中    
    $count = $xs->search->count(); //获取搜索结果的匹配总数估算值
    if($count){
      $data = array();
      foreach ($docs as $key=>$doc){
        $data[$key]['pid'] = $doc->pid;
        $data[$key]['nid'] = $doc->nid;
        $data[$key]['category'] = $doc->category;
        $data[$key]['url'] = $doc->url;
        $data[$key]['name'] = $xs->search->highlight(htmlspecialchars($doc->name));
        $data[$key]['message'] = $xs->search->highlight(htmlspecialchars($doc->message));
      }
 
      return array('data'=>$data,'count'=>$count);
    }
    return array();
  }
 
  public function hotWord($num,$type='lastnum'){
 
    return $this->_xsearch->getHotQuery($num,$type);
  }
 
  public function expanded($keyWord){
 
    return $this->_xsearch->getExpandedQuery($keyWord);
  }
 
  public function lastCount(){
 
    return $this->_xsearch->getLastCount();
  }
 
  public function index($data,$update=0){
 
    // 创建文档对象
    $doc = new XSDocument;
    $doc->setFields($data);
 
    // 添加或更新到索引数据库中
    if(!$update){
      $this->_xindex->add($doc);
    }else{
      $this->_xindex->update($doc);
    }
  }
 
  public function delete($idArray){
 
    //删除索引(主键删除array('1','2','3'))
    $this->_xindex->del($idArray); 
  }
 
  public function addSynonym($word1,$word2){
 
    $this->_xindex->addSynonym($word1,$word2);
  }
 
  public function clearIndex(){
 
    $this->_xindex->clean();
  }
 
}
 
?>

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
十天学会php之第二天
Oct 09 PHP
用PHP编程开发“虚拟域名”系统
Oct 09 PHP
PHP 采集心得技巧
May 15 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
PHP-FPM实现性能优化
Mar 31 #PHP
PHP实现通过URL提取根域名
Mar 31 #PHP
PHP的PDO操作简单示例
Mar 30 #PHP
PHP Smarty模版简单使用方法
Mar 30 #PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 #PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 #PHP
PHP记录页面停留时间的方法
Mar 30 #PHP
You might like
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
python线程池如何使用
2020/05/28 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
物流管理应届生求职信
2013/11/07 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
付款承诺函范文
2015/01/21 职场文书
店铺转让协议书
2015/01/29 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby