問題
solr+php如何安裝設定使用
solr提供http請求查詢介面。客戶端透過觸發http請求獲取json、xml等數據格式數據,並對數據進行解析顯示。一般情況下各種語言都會有封裝好的客戶端插件,如java的solrj、python的solrpy,php的php-solr-client,根據提供的api進行索引和查詢。至於solr的安裝配置可以去看看solr cookbook 這本書.
解決方法2:
要讓php程式用上solr java怎麼辦? 搜素系統的索引怎麼建立?
php怎麼寫程式碼?
solr是java寫的,是一個伺服器程序,有一個管理介面,提供http介面
除了設定檔不用寫java程式碼、php有solr的擴充
1,安裝solr和驗證你安裝上了
參考CentOS下安裝Solr5.3
solr5.3已經是單獨的伺服器,包括web管理後台,所以挺好的只需要保證你的linux 有jdk直接下載solr5.3的包, Apache Download Mirrors
一定要下載solr5.3.tgz 這樣的,不要下src的包,然後解壓縮得到類似solr5.3這樣的目錄
安裝最關鍵的兩點1 不是解壓縮就能用solr目錄下有個install腳本要運行,並且要指定data目錄(要儲存索引)2 solr 有一個core的概念,理解成資料庫裡的db吧,可以建立一個core,這個也有腳本,但一定保證data目錄是solr用戶的權限
# solr-5.3.0/bin/install_solr_service.sh solr-5.3.0.tgz -d /data/solr -i /usr/local
創建一個你自己的core
http://你的ip::8983/solr 這個是管理介面
只專注於add Documents 和query 即可,一個事加索引一個事查詢,特別容易理解add Documents介面,已經有例子,索引了兩個欄位id和title ,你改下資料提交
Query 介面 q=*:* 查詢所有
q=title:a* 查詢title為a開頭的
簡單玩幾次很容易明白
現在有id,title 我想添加一個自己的字段,type怎麼辦? :
參考下填入上type即可
service solr stop/start 重啟服務
回到管理介面,加入數據,假設你要聯合搜尋title和type
那麼q= title:xx fq= type:xx, 多加一個fq明白了吧
3,寫一個php程式
q明白了吧
3,寫一個php程式研究,基本上可以做到建立數據,查出數據現在就寫一個php程式完成這些功能參考:PHP: Solr - Manual
SolrInputDocument 輸入文檔
SolrClient 這個是用戶連接solr伺服器
SolrQuery SolrClient 這個是用戶連接solr伺服器
SolrQuery 這個是構建這個是構建這個是直接構建條件上程式好了:
class Search { private $client; public function __construct() { $options = [ 'hostname' => 'localhost', //solr服务器的ip 'path' => 'solr/corename', //这个解决core的问题,corename就是你的core 'wt' => 'json', ]; $this->client = new \SolrClient($options); } public function addIndex($id, $type, $content) {//加索引的函数 $doc = new \SolrInputDocument(); $doc->addField('id', $type . "." . $id); //保证id唯一我把type加上了 $doc->addField('type', $type); $doc->addField('title', $content); $client = $this->client; $updateResponse = $client->addDocument($doc); $client->commit(); //一定要commit才能立即生效 $ret = ($updateResponse->getResponse()); if ( isset($ret->responseHeader['status']) ) { return $ret->responseHeader['status'] == 0?true:false; } return false; } public function search($key, $type=0, $page=0, $limit=15) { $query = new \SolrQuery(); $query->setQuery('title:' . $key . "*"); //这个是设置keyword $query->setStart($page); //分页的 $query->setRows($limit); if($type) { $query->addFilterQuery('type:' . $type); //用到fq了 } $query->addField('id')->addField('title')->addField('type'); //这里是你要查哪些字段 $client = $this->client; $query_response = $client->query($query); $response = $query_response->getResponse(); $response = ($response->response); if ( is_array($response->docs) ) { foreach($response->docs as &$doc) { $id = explode(".", $doc->id); if( isset($id[1]) ) { $doc->id = $id[1]; } $doc->type = isset($doc->type[0])?$doc->type[0]:''; } } return ($response); } }