文档章节

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
码字总数 28445
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

策略模式

策略模式封装的是算法,而状态模式侧重的对象状态的转变。 /** * 策略,定义计算报价算法的接口 */public interface Strategy { /** * 计算应报的价格 * @param goo...

铁骨铮铮
39分钟前
0
0
如何用JavaScript写一个区块链?

Part1实现一个基本的区块链 1.区块链 区块链是由一个个任何人都可以访问的区块构成的公共数据库。这好像没什么特别的,不过它们有一个有趣的属性:它们是不可变的。一旦一个区块被添加到区块...

骚年锦时
42分钟前
1
0
HTTP协议

HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议...

惊尘大人
44分钟前
1
0
Feign输出Info级别日志

背景   spring cloud netfix组件中,feign相关的日志默认是不会输出的,需要自定义配置才能输出,并且Feign只对Debug基本的日志做出响应, 实际业务需要输出Info级别的日志,所以需要做自定...

xiaomin0322
49分钟前
3
0
面向解决问题的java编程,spring boot,mybatis generator和坑-1starter

1、start一个spring boot项目 第一课我们也不能免俗,要从starter开始,spring boot的起始项目脚手架可以从spring boot官方starter生成地址开始:https://start.spring.io/ 这张图列出了一个...

wphmoon
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部