中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

php調(diào)用solr封裝

2018-07-20    來源:open-open

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
solr自身提供了http的接口方法,這是用php實現(xiàn)的簡單封裝,其它語言也可以根據(jù)相應(yīng)的http接口做方便實現(xiàn)。
<?php
class SolrUtil
{
	private $solrserver = '';
	private $core = '';
	
	/**
	 * 
	 * @param unknown_type $core $multicore中的索引實例名稱
	 * @param unknown_type $solrserver solr服務(wù)器地址
	 * @return boolean
	 */
	public function __construct($solrserver, $core = null)
	{
		$this->solrserver = $solrserver;
		if(isset($core) == true)
		{
			$this->core = $core;
		}
	}
	
	public function setCore($core){
		$this->core = $core;
	}
	public function getCore(){
		return $this->core;
	}
	/**
	 * 
	 * @param unknown_type $data
	 * $data['q'] 查詢關(guān)鍵詞
	 * $data['page'] 當前頁
	 * $data['pageSize'] 每頁數(shù)據(jù)量
	 * $data['fl'] 查詢結(jié)果返回的字段,
	 * $data['sort'] 排序字段,
	 * $data['wt'] 返回結(jié)果格式,可選值json或xml,默認返回json格式
	 * $data['hl.fl'] 指定高亮字段,
	 * $data['facet.field'] 分組統(tǒng)計
	 * hl=true&hl.fl=name,features
	 */
	public function select($data)
	{
		$result = array('success'=>0,'info'=>'操作失敗');
		if(empty($data['q']) == true)
		{
			$result = array('success'=>0,'info'=>'關(guān)鍵詞不能為空');
		}
		else
		{
			$parame = array();
			$parame['q'] = urlencode($data['q']);
			$rows = isset($data['pageSize']) == true ? intval($data['pageSize']) : 25;
			$page = isset($data['page']) == true ? intval($data['page']) : 1;
			$start = $page > 0 ? ($page - 1) * $rows : 0;
			$parame['start'] = $start;
			$parame['rows'] = $rows;
			if(empty($data['fl']) == false)
			{
				$parame['fl'] = urlencode($data['fl']);
				
			}
			if(empty($data['sort']) == false)
			{
				$parame['sort'] = urlencode($data['sort']);
			}
			if(empty($data['hl.fl']) == false)
			{
				$parame['hl.fl'] = urlencode($data['hl.fl']);
			}
			if(empty($data['facet.field']) == false)
			{
				$fields = $data['facet.field'];
				$fieldStr = '';
				foreach($fields as $field)
				{
					if($fieldStr == ''){
						$fieldStr = $field;
					}
					else
					{
						$fieldStr .= '&facet.field='.$field;
					}
				}
				$parame['facet'] = 'true';
				$parame['facet.field'] = $fieldStr;
			}
			
			$method = 'select';
			$solrData = $this->httpGet($method, $parame);
			
			if(empty($solrData) == false)
			{
				$data = json_decode($solrData, true);
				if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
				{
					$result = array('success'=>1,'info'=>'操作成功', 'data'=>$data);
				}
				else
				{
					$result = array('success'=>0,'info'=>'查詢失敗', 'error'=>$solrData);
				}
			}
			else
			{
				$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
			}
		}
		return $result;
	}
	
	/**
	 * 分詞
	 * $data['q'] 查詢關(guān)鍵詞
	 */
	public function analysis($data){
		$result = array('success'=>0,'info'=>'操作失敗');
		if(empty($data['q']) == true)
		{
			$result = array('success'=>0,'info'=>'關(guān)鍵詞不能為空');
		}
		else
		{
			$parame = array();
			$parame['q'] = urlencode($data['q']);
			$method = 'analysis/field';
			$solrData = $this->httpGet($method, $parame);
			
			if(empty($solrData) == false)
			{
				$data = json_decode($solrData, true);
				if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
				{
					$result = array('success'=>1,'info'=>'操作成功', 'data'=>$data);
				}
				else
				{
					$result = array('success'=>0,'info'=>'分詞失敗', 'error'=>$solrData);
				}
			}
			else
			{
				$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
			}

		}
		return $result;
	}
	
	/**
	 * 搜索建議
	 * @param array $data
	 * $data['q'] 關(guān)鍵詞
	 */
	public function suggest($data)
	{
		$result = array('success'=>0,'info'=>'操作失敗');
		if(empty($data['q']) == true)
		{
			$result = array('success'=>0,'info'=>'關(guān)鍵詞不能為空');
		}
		else
		{
			$parame = array();
			$parame['spellcheck.q'] = urlencode($data['q']);
			$parame['spellcheck'] = 'true';
			$method = 'suggest';
			$solrData = $this->httpGet($method, $parame);
			
			
			if(empty($solrData) == false)
			{
				$data = json_decode($solrData, true);
				if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
				{
					$result = array('success'=>1,'info'=>'操作成功', 'data'=>$data);
				}
				else
				{
					$result = array('success'=>0,'info'=>'獲取搜索 建議失敗', 'error'=>$solrData);
				}
			}
			else
			{
				$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
			}

		}
		return $result;
	}
	
	/**
	 * 相似搜索
	 * @param unknown_type $data
	 * $data['q'] 查詢關(guān)鍵詞
	 */
	public function moreLike($data)
	{
		$result = array('success'=>0,'info'=>'操作失敗');
		if(empty($data['q']) == true)
		{
			$result = array('success'=>0,'info'=>'關(guān)鍵詞不能為空');
		}
		else{
			if(isset($data) == false){
				$data = array();
			}
			$data['command'] = 'status';
			$method = 'dataimport';
			$solrData = $this->httpGet($method, $data);

			if(empty($solrData) == false)
			{
				$data = json_decode($solrData, true);
				if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
				{
					$result = array('success'=>1,'info'=>'操作成功', 'data'=>$data);
				}
				else
				{
					$result = array('success'=>0,'info'=>'增量更新索引失敗', 'error'=>$solrData);
				}
			}
			else
			{
				$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
			}
		}
		return $result;
	}
	
	/**
	 * 全量導入索引
	 * @param array $data
	 * $data['clean']    可選參數(shù),為true時刪除原有索引,false不刪除,默認值為true
	 * $data['wt']       可選參數(shù),返回的數(shù)據(jù)格式,值為json或xml
	 * $data['entity']   可選參數(shù),document下面的標簽(data-config.xml),使用這個參數(shù)可以有選擇的執(zhí)行一個或多個entity。如果不選擇此參數(shù)那么所有的都會被運行
	 * $data['commit']   可選參數(shù),選擇是否在索引完成之后提交。默認為true
	 * $data['optimize'] 可選參數(shù),默認為true
	 * $data['debug']    可選參數(shù),是否以調(diào)試模式運行,如果以調(diào)試模式運行,那么默認不會自動提交,請加參數(shù)“commit=true”
	 */
	public function fullImport($data = null)
	{
		if(isset($data) == false){
			$data = array();
		}
		$data['command'] = 'full-import';
		$method = 'dataimport';
		$solrData = $this->httpGet($method, $data);
		
		if(empty($solrData) == false)
		{
			$data = json_decode($solrData, true);
			if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
			{
				$result = array('success'=>1,'info'=>'操作成功', 'data'=>$data);
			}
			else
			{
				$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙', 'error'=>$solrData);
			}
		}
		else
		{
			$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
		}
		return $result;
	}
	
	/**
	 * 增量更新索引
	 * @param array $data
	 * $data['wt'] 返回的數(shù)據(jù)格式,值為json或xml,默認json
	 */
	public function deltaImport($data = null)
	{
		if(isset($data) == false){
			$data = array();
		}
		$data['command'] = 'delta-import';
		$method = 'dataimport';
		$solrData = $this->httpGet($method, $data);
		if(empty($solrData) == false)
		{
			$result = array('success'=>1,'info'=>'操作成功', 'data'=>json_decode($solrData, true));
		}
		else
		{
			$result = array('success'=>0,'info'=>'增量更新索引失敗,服務(wù)器繁忙', );
		}
		return $result;
	}
	
	/**
	 * 查看當前dataimport索引更新狀態(tài)
	 * @param unknown_type $data
	 */
	public function statusImport($data = null)
	{
		if(isset($data) == false){
			$data = array();
		}
		$data['command'] = 'status';
		$method = 'dataimport';
		$solrData = $this->httpGet($method, $data);
		if(empty($solrData) == false)
		{
			$result = array('success'=>1,'info'=>'操作成功', 'data'=>json_decode($solrData, true));
		}
		else
		{
			$result = array('success'=>0,'info'=>'增量更新索引失敗,服務(wù)器繁忙');
		}
		return $result;
	}
	
	/**
	 * 終止當前執(zhí)行的dataimport任務(wù)
	 * @param array $data
	 */
	public function abortImport($data = null)
	{
		if(isset($data) == false){
			$data = array();
		}
		$data['command'] = 'abort';
		$method = 'dataimport';
		$solrData = $this->httpGet($method, $data);
		if(empty($solrData) == false)
		{
			$result = array('success'=>1,'info'=>'操作成功', 'data'=>json_decode($solrData, true));
		}
		else
		{
			$result = array('success'=>0,'info'=>'增量更新索引失敗,服務(wù)器繁忙');
		}
		return $result;
	}
	
	/**
	 * 
	 * @param array $datas 格式
	 * 批量更新$datas=array(array('id'=>xx, 'app_name'=>array('set'=>'測試')))),id為索引主鍵字段,必須包含主鍵值
	 * 單個更新$datas=array('id'=>xx, 'app_search_text'=>array('add'=>'測試'), 'look_count'=>array('inc'=>10))
	 * set 設(shè)置或替當前值,null清空當前值
	 * add 如果字段屬性為multi-valued,添加一個值
	 * inc 設(shè)置自增加值
	 */
	public function update($datas)
	{
		$parame = '';
		$result = array('success'=>0,'info'=>'操作失敗');
		if(isset($datas[0]) == false || is_array($datas[0]) == false){
			$datas = array($datas);
		}
		// 確定只做更新操作,如果不帶set則會刪除舊索引,再重新創(chuàng)建
		foreach($datas as $data)
		{
			$hasSet = false;
			foreach($data as $key=>$value)
			{
				if(empty($value['set']) == false)
				{
					$hasSet = true;
					continue;
				}
			}
			if($hasSet == false)
			{
				$result = array('success'=>0,'info'=>'參數(shù)錯誤,缺少set參數(shù),請修改');
				return $result;
			}
		}

		$method = '/update?commit=true';
		$solrData = $this->httpPost($method, $datas);
		
		if(empty($solrData) == false)
		{
			$data = json_decode($solrData, true);
			if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
			{
				$result = array('success'=>1,'info'=>'操作成功', 'data'=>json_decode($solrData, true));
			}
			else
			{
				$result = array('success'=>0,'info'=>'更新失敗', 'error'=>$solrData);
			}
		}
		else
		{
			$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
		}
		return $result;
	}
	
	/**
	 * 刪除索引 
	 * @param unknown_type $data $data=array('id'=>xx),id為索引主鍵字段
	 * @return multitype:number string
	 */
	public function delete($data)
	{
		$data = array('delete'=>$data);

		$method = '/update?commit=true';
		$solrData = $this->httpPost($method, $data);
		if(empty($solrData) == false)
		{
			$data = json_decode($solrData, true);
			if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
			{
				$result = array('success'=>1,'info'=>'操作成功', 'data'=>json_decode($solrData, true));
			}
			else
			{
				$result = array('success'=>0,'info'=>'更新失敗', 'error'=>$solrData);
			}
		}
		else
		{
			$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
		}
		return $result;
	}
	
	/**
	 * 添加索引(不建議在程序中調(diào)用 ),注意:如果主鍵值相同,則會先刪除舊索引,再添加新數(shù)據(jù)
	 * @param unknown_type $datas
	 *  批量添加$datas=array(array('id'=>xx, 'app_name'=>'測試測試'),id為索引主鍵字段,必須包含主鍵值
	 * @return multitype:number string
	 */
	public function add($datas)
	{
		$parame = '';
		$result = array('success'=>0,'info'=>'操作失敗');
		if(isset($datas[0]) == false || is_array($datas[0]) == false){
			$datas = array($datas);
		}

		$method = '/update?commit=true';
		$solrData = $this->httpPost($method, $datas);
		if(empty($solrData) == false)
		{
			$data = json_decode($solrData, true);
			if(isset($data['responseHeader']['status']) == true && $data['responseHeader']['status'] == 0)
			{
				$result = array('success'=>1,'info'=>'操作成功', 'data'=>json_decode($solrData, true));
			}
			else
			{
				$result = array('success'=>0,'info'=>'更新失敗', 'error'=>$solrData);
			}
		}
		else
		{
			$result = array('success'=>0,'info'=>'網(wǎng)絡(luò)錯誤,服務(wù)器繁忙');
		}
		return $result;
	}
	
	private function httpPost($method, $data){
		$data_string = json_encode($data);
// 		$url = $this->solrserver . $this->core . '/update?commit=true';
		$url = $this->solrserver . $this->core . $method;
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");  // 更新需要post提交
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		'Content-Type: application/json',
		'Content-Length: ' . strlen($data_string))
		);
		$solrData = curl_exec($ch);
		return $solrData;
	}
	
	private function httpGet($method, $parame)
	{
		$url = $this->solrserver . $this->core."/".$method;
		$data = "";
		$wt = 'json';
		if(empty($parame['wt']) == false)
		{
			$wt = $parame['wt'];
			unset($parame['wt']);
		}
		$url .= "?wt=".$wt;
		foreach($parame as $key=>$value)
		{
			$data .= "&". $key."=".$value;
		}
		$url .= $data;
		echo $url."\n";
		$result = file_get_contents($url);
		return $result;
	}

}




?>


<?php
include_once 'SolrUtil.php';
$solrUtil = new SolrUtil('http://127.0.0.1:8983/solr/', 'core1');
// $data = $solrUtil->select(array('q'=>'text:商業(yè)  AND app_name:測試'));
// $data = $solrUtil->select(array('q'=>'測試'));
$data = $solrUtil->select(array('q'=>'id:"864"'));
// $data = $solrUtil->analysis(array('q'=>'測試數(shù)據(jù)'));
// $data = $solrUtil->suggest(array('q'=>'測試'));
// $data = $solrUtil->moreLike(array('q'=>'測試'));
// $data = $solrUtil->fullImport();
// $data = $solrUtil->deltaImport();
// $data = $solrUtil->abortImport();
// $data = $solrUtil->statusImport();
// $data = $solrUtil->update(array('id' => 864,'app_name'=>array('set'=>'測試2')));
// $data = $solrUtil->delete(array('id'=>864));
// $data = $solrUtil->add(array('id'=>864, 'app_name' => '測試成功'));
print_r($data);
?>



標簽: 服務(wù)器 服務(wù)器地址 搜索 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:php備份MYSQL類

下一篇:java獲取系統(tǒng)信息