文档章节

php +solr 服务类

杨太化
 杨太化
发布于 2014/11/11 10:39
字数 438
阅读 30
收藏 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
深圳
程序员
私信 提问
集成 PHP 应用和 Solr 搜索引擎

你为什么需要搜索引擎?单纯数据库不够用?如果你只是创建小网站,数据库就够了。但当你创建中性或大型应用的时候,搜索引擎是更明智的选择。当然如是一说,小网站也可以利用Solr,获得高相关...

oschina
2013/03/13
12.1K
13
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

没有更多内容

加载失败,请刷新页面

加载更多

SAP订单编排和流程增强概述

SAP产品里的订单处理,无论是On-Premises解决方案还是云产品,我认为归根到底可以概括成四个字:订单编排,包含两个层次的内容: 1. 单个订单通过业务流程或者工作流驱动的状态迁移; 2. 多种...

JerryWang_SAP
8分钟前
0
0
Tomcat shutdown.sh不能关掉tomcat进程的解决方法

Tomcat shutdown.sh不能关掉tomcat进程的解决方法 2018年08月14日 16:21:55 脚踏一方土 阅读数:184 标签: Tomcat 更多 个人分类: Tomcat 版权声明:本文为博主原创文章,未经博主允许不得...

linjin200
15分钟前
0
0
Linux添加PYTHONPATH方法以及3种修改环境变量方法

在用Linux(OS:Centos 7.2)时看到有一行代码是: export PYTHONPATH=$PYTHONPATH:/home/usrname/models:/home/usrname/models/one 意思是将models以及其目录下的one文件夹加入系统环境中。 ...

dragon_tech
18分钟前
0
0
redis数据结构

redis不只是一个简单的键(key)-值(value)数据库,实际上它是一个数据结构服务器,支持各种类型的值。也就是说,在传统的键-值数据库中,你把字符串键与字符串值联系起来,而在redis,值不仅限...

hblt-j
20分钟前
2
0
MySQL事务的的介绍及使用

1. 事务的特性 1.1 原子性(Atomicity): 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 1.2. 一致性(Consistency): 在一个事务中,事务的前后数据的完...

kuchawyz
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部