文档章节

php +solr 服务类

杨太化
 杨太化
发布于 2014/11/11 10:39
字数 438
阅读 26
收藏 1
<?php
/**
 * solr 操作类[solr php client]
 * Created by PhpStorm.
 * User: Administrator
 * Date: 14-11-6
 * Time: 下午3:42
 */



class solr{
    private $user;
    private $pwd;
    private $host;
    private $port;
    private $core;

    public function solr($config=array()){
        $this->Init_Config($config);
    }
    private function Init_Config($config){
        global  $_G;
        if(empty($config)&& iN_array('solr',$_G['setting']['plugins']['available'])){
            $config=$_G['cache']['plugin']['solr'];
        }
        if(!empty($config)&&is_array($config)){
            foreach($config as $key=>$value){
                if(!array_key_exists($key,get_class_vars(get_class($this)))){
                    continue;
                }
                $this->setOption($key,$value);
            }
        }

    }
    /**
    +------------------------------------------------------------------------
     *设置类属性值函数
    +------------------------------------------------------------------------
     * @param mix $key
     * @param mix $value
     */
    private function setOption($key,$value){
        $key=strtolower($key);
        $this->$key=$value;
    }

    /**
     * 认证调用的字符串
     * @return string
     */
    private function Authentication(){
        return $this->user.':'.$this->pwd;
    }

    /**
     * 请求的参数
     * @param bool $Auth
     * @return string
     */
    public  function QueryUrl($Auth=false){
        $url='http://';
        $url.=$Auth?$this->Authentication().'@':'';
        $url.=$this->host.':'.$this->port.'/'.$this->core.'/';
        return $url;

    }

    //生成搜索链接
    private function generateSearchUrl( $servlet, $params = array()){
        $searchurl=$this->QueryUrl();
        $queryString = http_build_query($params, null, "&");
        $queryString = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $queryString);
        return $searchurl . $servlet .'?'. $queryString;
    }

    private function curlPost($url, $post, $timeout=3, $charset='gb2312', $contentType = "") {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        $header[] = 'Host:'.parse_url($url, PHP_URL_HOST);
        $header[] = $contentType?$contentType:'Content-type: application/x-www-form-urlencoded;charset='.$charset;
        $header[] = 'Content-Length:'.strlen($post);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
        curl_setopt($ch, CURLOPT_FAILONERROR, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

        $contents = curl_exec($ch);
        curl_close($ch);
        return $contents;
    }

    /**
     * post提交solr更新
     * @param  $updatedata
     * @return mixed
     */
    public function solrUpdate($updatedata=array(),$params=array()){
        $queryurl=$this->generateSearchUrl('update',$params);
        $contentType = "Content-type:application/json";
        $response = $this->curlPost($queryurl,$updatedata,3,'',$contentType);
        return $response;
    }
    /**
     *  搜索数据
     *
     */
    public function search($params=array()){
        $searchUrl = $this->generateSearchUrl("select", $params);
        $contentType = "Content-type:application/json";
        $response = $this->curlPost($searchUrl, '', 3, '', $contentType);
        return $response;
    }
    //对象转数组
    private static function object2array($object = null){
        $object = is_object($object)?get_object_vars($object):$object;
        $object = (!$object)?"x":$object;
        if(is_array($object)){
            foreach ($object as $k=>$v){
                if(is_object($v))
                    $object[$k] = self::object2array($v);
            }
        }
        return $object;
    }




}

?>


© 著作权归作者所有

共有 人打赏支持
杨太化
粉丝 13
博文 226
码字总数 26188
作品 0
深圳
程序员
BroadLeaf项目搜索功能改进

关于Solr Broadleaf项目中关于商品的搜索使用了嵌入式的Solr服务器,这个从配置文件中可以看出来。 项目主页: http://www.broadleafcommerce.com/ 示例网站: http://demo.broadleafcommerc...

_夏天的风_
2014/09/10
0
1
Spring Boot 中使用 SolrCloud

Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库; Solr是以Lucene为基础实现的文本检索应用服务。Solr部署方式有单机方式、多机Master-Slaver方式、Cloud方式。 SolrCloud是基于...

PengLei
2017/10/19
0
0
solr6.6初探之solrj

一. solrj简介:   solrj可以使Java应用程序很方便的访问与操作solr。solrj有几个核心类,分别为:1.SolrClient 2.SolrRequests 3.SolrQuerys 4.SolrReponses   tips:该jar包可以在${solr....

java~nick
2017/10/24
0
0
solr导入pdf操作

索引数据源并不会一定来自于数据库、XML、JSON、CSV这类结构化数据,很多时候也来自于PDF、word、html、word、MP3等这类非结构化数据,从这类非结构化数据创建索引,solr也给我们提供了很好的...

zcl111
2016/07/09
28
0
CentOS下安装Solr5.3

https://lucene.apache.org/solr/ 前言 Solr现在是一个独立的服务器。 从Solr5.0开始,Solr不再发布为在任何Servlet容器中部署的“war”Web应用程序包(Web Application Archive)。Solr现在...

沉淀岁月
2016/09/08
5
0

没有更多内容

加载失败,请刷新页面

加载更多

Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
2
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
7
0
在Ubuntu安装和配置Sphinx

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。 在开始本指南之前,您需要: 一个Ubuntu 16.04服务器。 sudo的一个非root用户,您可以通过以下设置本教程 。 安装在服务...

阿锋zxf
今天
1
0
Qt编写输入法V2018超级终结版

对于qt嵌入式linux开发人员来说,输入法一直是个鸡肋问题,要么不支持实体键盘同步,要么不能汉字输入,要么不支持网页输入等,这几年通过陆续接触大量的各种输入法应用场景客户,得到真实需...

飞扬青云
今天
2
0
TypeScript基础入门之高级类型的多态的 this类型

转发 TypeScript基础入门之高级类型的多态的 this类型 高级类型 多态的this类型 多态的this类型表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部