參考文章:
- https://www.cnblogs.com/zihai/p/7311412.html
- https://blog.csdn.net/weixin_38730732/article/details/81359984?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
-
https://www.cnblogs.com/JimmyBright/p/7156085.html
4.https://blog.csdn.net/ailihui366/article/details/102745117
5.https://blog.csdn.net/qq_39454048/article/details/102581140
僅測試在windows本地使用 我的環(huán)境是wamp
- 安裝solr
下載solr,選擇相應(yīng)版本,注意:因?yàn)閟olr對是基于java的,所以必需安裝jre。每個版本的 solr對jre版本要求不一樣,下載時請注意solr的版本。
我的java版本是:"1.8.0_181"
我用的是solr6.6.0 下載地址 http://archive.apache.org/dist/lucene/solr/6.6.0/
將壓縮包解壓到任意目錄 win+R cmd進(jìn)入命令行模式 cd到solr6.6.0中
啟動solr
運(yùn)行命令: bin\solr.cmd start

solr默認(rèn)監(jiān)聽的是8983端口
更多命令用法,請使用solr -help,如果solr已經(jīng)啟動,請使用solr start -help。
如果啟動成功,可以在瀏覽器中打開:http://localhost:8983/solr/,使用其web管理客戶端。

- 查看solr范例
先停止solr實(shí)例
bin\solr.cmd stop all //關(guān)閉所有
或者
bin\solr.cmd stop 8983 //指定端口號
再啟用solr范例
bin\solr.cmd -e techproducts
打開web管理客戶端:http://localhost:8983/solr/,查看結(jié)果

根據(jù)結(jié)果,可知道,techproducts范例中共有32篇文章。
現(xiàn)在可以嘗試他的查詢功能。
我在q輸入框中輸入了Samsung,其得到的結(jié)果如下圖

- 添加文檔


添加好后,進(jìn)入查詢界面,看能否查到這篇文檔

- 刪除文檔

返回查詢界面,查詢刪除后的結(jié)果

- 創(chuàng)建solr項(xiàng)目
現(xiàn)在學(xué)會一些基本的操作,可以自己創(chuàng)建一個項(xiàng)目錄了。
先把停止solr
solr.cmd stop -all
solr是一個實(shí)例可以有多個core或collection,如果不先停止,創(chuàng)建的core將會添加到啟用的techproducts實(shí)例中
solr.cmd create -c test

重新刷新web客戶端

- 下載php的solr擴(kuò)展
現(xiàn)在開始使用php和solr交互了,所以必需安裝solr擴(kuò)展。
分兩步:
1.安裝libssh2擴(kuò)展
瀏覽器打開當(dāng)前php,效果如下圖所示,查找對應(yīng)位置信息

如上圖所示,查看當(dāng)前VC版本, TS還是NTS(線程安全還是非安全),以及X86還是X64。
然后進(jìn)入網(wǎng)站,查找對應(yīng)版本http://windows.php.net/downloads/pecl/releases/ssh2/0.12/
由于當(dāng)前環(huán)境事 X64,TS, VC11,所以我們選擇下面連接下載

下載后解壓,
安裝
將 php_ssh2.dll、php_ssh2.pdb 放到你的 php 擴(kuò)展目錄下 php/ext/ 下。
將libssh2.dll 復(fù)制到 c:/windows/system32 和 c:/windows/syswow64 (64位系統(tǒng)才有)各一份
php.ini中加入 extension=php_ssh2.dll
檢查安裝
瀏覽器打開剛才的網(wǎng)址,查看phpinfo,可以看到安裝成功

2.安裝solr擴(kuò)展
下載地址:http://windows.php.net/downloads/pecl/releases/solr/;
將壓縮包的php_solr.dll、php_solr.pdb 放到你的 php 擴(kuò)展目錄下 php/ext/ 下。
php.ini中加入 extension=php_solr.dll
重啟服務(wù)器,查看phpinfo(),是否有顯示solr擴(kuò)展加載成功。
安裝之前需使用phpinfo()查看自己版本信息、下載相匹配的擴(kuò)展
下載擴(kuò)展時注意 ts或者是nts

- 在thinkphp3.2中集成solr
composr 安裝不表
由于php版本低直接 composr require solarium/solarium失敗
所以直接在新目錄創(chuàng)建composer.json文件
{
"require": {
"solarium/solarium": "^3.8"
}
}
然后進(jìn)入到項(xiàng)目根目錄下 cmd執(zhí)行 composr require solarium/solarium 如不成功 可嘗試 composer install/update



- tp3.2中代碼
Org/Util中新建SolrClient.class.php 用于查詢

<?php
namespace Org\Util;
/**
* @Description: 操作solr
* @Date:2012.9.1
* @Version:v1
* @Author:wujiawei
*/
class SolrClient
{
public $query_url='';
public $import_url='';
private $q='q=*.*';
private $fq='';
private $sort='';
private $rows='rows=10&start=0';
private $fl='';
private $raw_query='';
public $hl_str='';
function __construct()
{
$core = 'lgbv3';
$host='localhost:8983';
$this->query_url=sprintf("%s/solr/%s/select?indent=on&wt=json&",$host,$core);
$this->import_url=sprintf("%s/solr/%s/dataimport?indent=on&wt=json&command=full-import&verbose=false&clean=true&commit=true&optimize=false&core=crm&name=dataimport",$host,$core);
}
public function setQuery(array $query){
$q_str=[];
foreach ($query as $k=>$v) {
if(!empty($v)){
$q_str[]=urlencode($v);
}
}
if(!empty($q_str)){
$this->q='q='.implode(urlencode(' OR '),$q_str);
}
}
public function setFilterQuery(array $query){
$q_str=[];
foreach ($query as $k=>$v) {
$q_str[]='fq='.urlencode($v);
}
$this->fq=implode('&',$q_str);
}
public function setRows($start,$rows){
$this->rows=sprintf('rows=%s&start=%s',$rows,$start);
}
public function setHighLight(array $fields,$hlpre,$hlpost){
$hl_fl=[];
foreach ($fields as $field) {
$hl_fl[]=$field;
}
$this->hl_str=sprintf("hl.fl=%s&hl.simple.post=%s&hl.simple.pre=%s&hl=on",implode(',',$hl_fl),urlencode($hlpost),urlencode($hlpre));
}
public function setFl(array $fields){
$hl_fl=[];
foreach ($fields as $field) {
$hl_fl[]=$field;
}
$this->fl='fl='.implode(',',$hl_fl);
}
public function setRawQuery(array $params){
$raw=[];
foreach ($params as $k=>$v) {
$raw[]=$k.'='.$v;
}
$this->raw_query=implode('&',$raw);
}
public function sortQuery($field,$sort){
$this->sort= "sort=".$field.urlencode(' ').$sort;
}
/**
* 搜索查詢
* @return mixed
*/
public function search(){
$this->query_url.=$this->q;
!empty($this->fq)&&$this->query_url.='&'.$this->fq;
!empty($this->sort)&&$this->query_url.='&'.$this->sort;
!empty($this->rows)&&$this->query_url.='&'.$this->rows;
!empty($this->fl)&&$this->query_url.='&'.$this->fl;
!empty($this->raw_query)&&$this->query_url.='&'.$this->raw_query;
!empty($this->hl_str)&&$this->query_url.='&'.$this->hl_str;
return $this->getCurl($this->query_url);
}
/**
* 全量重構(gòu)索引
* @return mixed
*/
public function index(){
return $this->getCurl($this->import_url);
}
private function getCurl($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl) ;
curl_close($curl);
return json_decode($data,true);
}
}
使用solr的 控制器 包含增刪改查
<?php
namespace Demo\Controller;
use Think\Controller;
use Solarium\Client;
header('Content-Type:text/html;charset=utf-8');
class IndexController extends Controller{
public function actionSearch(){
$input = I('input');//查詢的文字
$page = I('page')-1;//頁數(shù)
empty($page)&&$page=0;
$pageLength=10;//默認(rèn)條數(shù)
$page<0&&$page=0;
$startRow = $page*$pageLength;
$params=explode(",",$input);
//調(diào)用示例
//實(shí)例化
$solr = new\Org\Util\SolrClient();
//設(shè)置查詢文字
$solr->setQuery($params);
//$startRow頁數(shù) $pageLength條數(shù)
$solr->setRows($startRow,$pageLength);
//getField 只拿這些字段
$solr->setFl(['id','name','third_cat_name','attributes','cover_image']);
//高亮突出
$solr->setHighLight(['name','third_cat_name'],"<b style='color: #f15353;'>","</b>");
//最終查詢
$data = $solr->search();
$response=&$data['response'];
$docs = &$response['docs'];
dump($docs);die;
}
/**
* 增加索引/更新索引(根據(jù)所傳id是否已經(jīng)存在,存在則更新,否則新增)
* @return \Illuminate\Support\Collection
*/
public function updateSearchProduct(){
$options = [
'endpoint' => [
'localhost' => [
'host' => '127.0.0.1', //IP地址
'port' => 8983, //端口號
'core' => null,
'path' => '/solr/lgbv3',
'wt'=>'json',
],
],
];
$client = new Client($options);
$data=array(
"id"=>"15340",
"sid"=>9867,
"shop_id"=>41,
"second_cat_name"=>"攝像機(jī)",
"first_cat_name"=>"視頻監(jiān)控",
"price"=>380.0,
"name"=>"??低昉OE供電網(wǎng)絡(luò)監(jiān)控攝像頭",
"third_cat_name"=>"網(wǎng)絡(luò)高清攝像機(jī)",
"attributes"=>"3:機(jī)型,12:槍型;4:分辨率,27:500萬像素;5:供電,33:DC12V;6:紅外夜視,40:30米;9:外殼,98:鋁合金",
"cover_image"=>"http://xxxx.com/upload/image/19480/qp3z5ujfw2nxy4mtclhg1533605053.jpg",
"brand"=>"??低?,
);
$update=$client->createUpdate($data);
$doc=$update->createDocument();
foreach ($data as $key=>$value){
$doc->$key=$value;
}
$update->addDocument($doc);
$update->addCommit();
$updateResponse=$client->update($update);
$res = $updateResponse->getResponse();
dump($res);die;
}
/**
* 刪除索引
*/
public function delete() {
$id='EN70906025';
//solr數(shù)據(jù)庫配置
$options = [
'endpoint' => [
'localhost' => [
'host' => '127.0.0.1', //IP地址
'port' => 8983, //端口號
'core' => null,
'path' => '/solr/lgbv3',//solr 索引庫位置
'wt'=>'json',
],
],
];
$client = new Client($options);//實(shí)例化 solr類
$update = $client->createUpdate();
$update->addDeleteById($id);//通過id
$update->addCommit();
$result = $client->update($update);
$res = $result->getResponse();
$a = $res->getStatusCode();
dump($a);
dump($res);die;
}
}