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

本文主要沿着以下三个方向来解开solr使用之谜,让大家使用solr跟使用mysql一样简单方便,安装和介绍部分已经在上一篇solr安装和简介详细介绍,在此就不详述。

1、solr php客户端实现

2、solr简单功能使用

3、solr facet高级功能使用

一、首先介绍solr用php如何实现链接和数据检索

//初始化solr服务

functioninit_solrs($cores=''){

if(!$solrs){

require_once'lib/Solrclient.class.php';

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

}

return$solrs;

}

//solr简单的实现

solr的php客户端主要是依靠curl来高效请求处理,其中update方法可以添加和修改数据 solr底层会自动判断是否根据schema.xml配置文件的unique_key字段进行判断已经添加过,如果没有添加就执行insert操作如果添加就执行update操作,默认使用json串去执行 还有其他的如xml等处理 这个自己可以根据习惯来处理,这里暂且使用json处理

二、solr的简单使用方法

举个列子:这里拿拉勾搜索来举例

在此咱们给上图搜索属性定义字段来讲解如何实现类似这样的功能

字段:工作地点:areaid 工作经验:exprience 学历要求:educations 公司阶段:stage 行业领域:industry 排序默认按更新时间:createtime 最新:updatetime 月薪:salarys 工作性质:jobnature等

在此讲解一下solr的core概念 其实core就类似mysql的数据库表 那么基于上图来说我们可以判断出来至少有2个core来存储相关的数据 一个是职位信息 一个是公司信息 为了方便搜索也可能会在职位信息中冗余一些公司相关属性(公司阶段、行业领域等等 可以通过触发式方式来同步职位和公司数据)

接下来我们简单讲解一下solr的简单功能各个参数是什么意思如下图所示,高级功能后面再讲解

接下来来看如何通过封装方法来实现solr查询以上数据简单的实现来抛砖引玉

/*

* 从solr中获取职位信息

*/

functiongetinfofromsolr($where=array()) {

//拼接where条件

$search=array();

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

//职位的状态

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

//搜索框内容

if(!empty($where['search'])){//这里就是类mysql的like操作*内容*这里没有分词

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

}

//工作性质 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']);

}

//工作经验

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

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

}

//学历要求

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

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

}

//公司阶段

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

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

}

//公司行业领域

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;

}

通过上面的代码即可实现简单的查询功能如果类似mysql的in操作可以简单的使用solr中的q参数

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

如果是连续的可以通过 job_id:[1 TO 10] 也可以表示大于等于小于 job_id:[1 TO *]

fq:就是多个字段的查询比如说a大于1并且b大于2就可以这么表示q=*:*&fq=a:[1 TO *]&fq=b:[2 TO *]

简单的操作就讲解到此

三、facet功能讲解

在这里我们也举一个例子 还是拿拉勾来举例

在本图中我们看到搜索百度后会在下面显示关于百度的所有功能 看到右边的红框中的百度在招聘的职位数和面试评价数 那么这个功能如果通过solr实现 这个在mysql中就是一个group的功能

这里就要用到solr的高级功能facet,facet我的理解就是分组、分类等等 淘宝的经典功能就是通过类facet实现的 比如下图:

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

要查找公司下面有多少个职位和多少个面试评价 这里以分类查找职位数

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

$search['facet'] = 'true'; //首先要让facet='true'表示开启facet功能纠正一下这里是字符串'true' 如果是facet=true生成链接就是facet=1 会执行错误

$search['facet.field'] = "company_id";//要进行计算统计的字段 在职位信息里面有公司id那么根据公司id进行统计就可以得到该公司下面有多少个职位数据

$search['facet.limit'] = 10;//这个是要截图并显示的个数

}

请求地址如下

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

结果如下图所示:

至此简单的facet功能就讲解完毕 后面会继续更新更多的关于facet的功能介绍,在此祝大家晚安

本文出自 “网站架构技术总结” 博客,请务必保留此出处http://mengphilip.blog.51cto.com/2243393/1726965

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容