solr5使用方法篇以及高級功能facet使用

本文主要沿著以下三個方向來解開solr使用之謎,讓大家使用solr跟使用mysql一樣簡單方便,安裝和介紹部分已經(jīng)在上一篇solr安裝和簡介詳細介紹,在此就不詳述。

1、solr php客戶端實現(xiàn)

2、solr簡單功能使用

3、solr facet高級功能使用

一、首先介紹solr用php如何實現(xiàn)鏈接和數(shù)據(jù)檢索

//初始化solr服務(wù)

functioninit_solrs($cores=''){

if(!$solrs){

require_once'lib/Solrclient.class.php';

$solrs=newSolrclient('',$cores);

}

return$solrs;

}

//solr簡單的實現(xiàn)

solr的php客戶端主要是依靠curl來高效請求處理,其中update方法可以添加和修改數(shù)據(jù) solr底層會自動判斷是否根據(jù)schema.xml配置文件的unique_key字段進行判斷已經(jīng)添加過,如果沒有添加就執(zhí)行insert操作如果添加就執(zhí)行update操作,默認使用json串去執(zhí)行 還有其他的如xml等處理 這個自己可以根據(jù)習(xí)慣來處理,這里暫且使用json處理

二、solr的簡單使用方法

舉個列子:這里拿拉勾搜索來舉例

在此咱們給上圖搜索屬性定義字段來講解如何實現(xiàn)類似這樣的功能

字段:工作地點:areaid 工作經(jīng)驗:exprience 學(xué)歷要求:educations 公司階段:stage 行業(yè)領(lǐng)域:industry 排序默認按更新時間:createtime 最新:updatetime 月薪:salarys 工作性質(zhì):jobnature等

在此講解一下solr的core概念 其實core就類似mysql的數(shù)據(jù)庫表 那么基于上圖來說我們可以判斷出來至少有2個core來存儲相關(guān)的數(shù)據(jù) 一個是職位信息 一個是公司信息 為了方便搜索也可能會在職位信息中冗余一些公司相關(guān)屬性(公司階段、行業(yè)領(lǐng)域等等 可以通過觸發(fā)式方式來同步職位和公司數(shù)據(jù))

接下來我們簡單講解一下solr的簡單功能各個參數(shù)是什么意思如下圖所示,高級功能后面再講解

接下來來看如何通過封裝方法來實現(xiàn)solr查詢以上數(shù)據(jù)簡單的實現(xiàn)來拋磚引玉

/*

*?從solr中獲取職位信息

*/

functiongetinfofromsolr($where=array())?{

//拼接where條件

$search=array();

$search['q']?="*:*";

//職位的狀態(tài)

$search['fq']?=array("status:".(int)$where['status']);

//搜索框內(nèi)容

if(!empty($where['search'])){//這里就是類mysql的like操作*內(nèi)容*這里沒有分詞

array_unshift($search['fq'],"jobnames:*".$where['search']."*");

}

//工作性質(zhì)?fq主要方式就是字段名:字段值

if(!empty($where['jobnature'])){

array_unshift($search['fq'],"jobnature:".(int)$where['jobnature']);

}

//工作城市

if(!empty($where['areaid'])){

array_unshift($search['fq'],"areaid:".(int)$where['areaid']);

}

//工作經(jīng)驗

if(!empty($where['experience'])){

array_unshift($search['fq'],"experience:".(int)$where['experience']);

}

//學(xué)歷要求

if(!empty($where['educations'])){

array_unshift($search['fq'],"educations:".(int)$where['educations']);

}

//公司階段

if(!empty($where['stage'])){

array_unshift($search['fq'],"stage:".(int)$where['stage']);

}

//公司行業(yè)領(lǐng)域

if(!empty($where['industry'])){

array_unshift($search['fq'],"industry:".(int)$where['industry']);

}

//排序功能

if(!empty($where['sort'])){

$search['sort']?=$where['sort'];

}else{

$search['sort']?='updatetime?desc';

}

//分頁處理

$search['start']?=?0;

$search['rows']?=?20;

$search['fl']="jobid,areaid,exprience,educations,stage,industry";

$rows=?init_solrs('job')->searchPage($search);

return$rows;

}

通過上面的代碼即可實現(xiàn)簡單的查詢功能如果類似mysql的in操作可以簡單的使用solr中的q參數(shù)

q:就是query的意思表達式是什么 比如查職位id為1,3,6,9,23,467等的操作 可以這么寫

job_id:1 or?job_id:3 or?job_id:6 or?job_id:7 or?job_id:23 or?job_id:467

如果是連續(xù)的可以通過 job_id:[1 TO 10] 也可以表示大于等于小于 job_id:[1 TO *]

fq:就是多個字段的查詢比如說a大于1并且b大于2就可以這么表示q=*:*&fq=a:[1 TO *]&fq=b:[2 TO *]

簡單的操作就講解到此

三、facet功能講解

在這里我們也舉一個例子 還是拿拉勾來舉例

在本圖中我們看到搜索百度后會在下面顯示關(guān)于百度的所有功能 看到右邊的紅框中的百度在招聘的職位數(shù)和面試評價數(shù) 那么這個功能如果通過solr實現(xiàn) 這個在mysql中就是一個group的功能

這里就要用到solr的高級功能facet,facet我的理解就是分組、分類等等 淘寶的經(jīng)典功能就是通過類facet實現(xiàn)的 比如下圖:

補充上面方面里面 用到facet功能

要查找公司下面有多少個職位和多少個面試評價 這里以分類查找職位數(shù)

if(!empty($where['company_id'])){

$search['facet'] = 'true'; //首先要讓facet='true'表示開啟facet功能糾正一下這里是字符串'true'?如果是facet=true生成鏈接就是facet=1 會執(zhí)行錯誤

$search['facet.field'] = "company_id";//要進行計算統(tǒng)計的字段 在職位信息里面有公司id那么根據(jù)公司id進行統(tǒng)計就可以得到該公司下面有多少個職位數(shù)據(jù)

$search['facet.limit'] = 10;//這個是要截圖并顯示的個數(shù)

}

請求地址如下

http://localhost:8983/solr/job/select?wt=json&indent=1&q=company_id%3A23187+or+company_id%3A4702+or+company_id%3A2275+or+company_id%3A774+or+company_id%3A2148+or+company_id%3A252+or+company_id%3A731+or+company_id%3A12216+or+company_id%3A956+or+company_id%3A9634&fq=status%3A0&sort=update_time+desc&start=0&rows=10&facet=true&facet.field=company_id&facet.limit=10&fl=job_id%2Ccompany_id%2Cjob_name%2Cjobnature%2Csalary%2Careaid%2Cexperience%2Ceducations%2Ccreate_time%2Cupdate_time

結(jié)果如下圖所示:

至此簡單的facet功能就講解完畢 后面會繼續(xù)更新更多的關(guān)于facet的功能介紹,在此祝大家晚安

本文出自 “網(wǎng)站架構(gòu)技術(shù)總結(jié)” 博客,請務(wù)必保留此出處http://mengphilip.blog.51cto.com/2243393/1726965

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容