设为首页 收藏本站
查看: 1942|回复: 0

[经验分享] Solr Facet 技术应用

[复制链接]

尚未签到

发表于 2016-12-16 06:11:08 | 显示全部楼层 |阅读模式
Solr Facet 简述
Facet是Solr检索的高级特性,基于搜索结果进行归类统计,生成范围更精确的导航信息,帮助与引导用户搜索,降低大结果的查找难度。如下图的各品牌,类别,价格等信息都可以通过Facet技术实现。

DSC0000.png
 
文章目标
本文将通过对Facet常用特性的学习,实现上图的导航效果,并简单类比Grouping特性。以下内容是基于 solr5.3.0 版本描述的。
 
Facet 特性
Facet 搜索特性可以分为以下几个部分
 
1. 一般性参数(General Parameters)
facet:facet 缺省是关闭的,需要显式打开才可以使用。打开方式也很简单,只需要添加参数 facet=true 就可以了。
facet.query:query可以传递任意符合Lucene语法的查询条件,solr会根据条件生成相应的统计信息。
比如facet.query=title:感冒,表示统计域<title>中包含<感冒>的Term的文档计数 :
 
select?q=*:*&wt=xml&indent=true&facet=true&facet.query=title:感冒
 

<lst name="facet_queries">
<int name="title:感冒">100</int>
</lst>
 
从结果可以看到命中文档有100篇,query也支持范围查询与前缀查询,比如
facet.query=price:[10 TO 100],表示统计price介于[10,100]的文档,
facet.query=date:[2006-01-01T00:00:00Z TO 2009-01-01T00:00:00Z],表示统计date介于06年到09年的文档。
 
2. Field-Value参数(Field-Value Faceting Parameters)
该类别用以表示需要对哪个Field进行归类统计。比如品牌类别统计:
 
select?q=*:*&wt=xml&indent=true&facet=true&facet.field=brand
 
表示对品牌域< brand>归类,如果归类结果很多的话可以使用[ facet.limit,facet.offset ]参数控制分页,统计结果缺省是按照命中条目数量,倒序返回前100条:

<lst name="facet_fields">
<lst name="brand">
<int name="葫芦娃">200</int>
<int name="天赐堂">100</int>
</lst>
</lst>
从结果中可以看到品牌<葫芦娃>的命中文档为200篇,<天赐堂>为100篇。那么我们就可以使用solr生成的统计结果完成章节目标的品牌,类别导航生成了。
 
3. 范围统计(Range Faceting)
主要针对数值, 日期范围的匹配场景,常用于价格,时间区间的导航生成。因实现方式都相似,这里就以价格区间为例:
 
select?q=*:*&wt=xml&indent=true&facet=true&facet.range=price&facet.range.start=0&facet.range.end=100&facet.range.gap=20
其中start,end 表示统计的价格区间,gap表示区间间隙。

<lst name="facet_ranges">
<lst name="price">
<lst name="counts">
<int name="0">10</int>
<int name="20">30</int>
<int name="40">0</int>
<int name="60">0</int>
<int name="80">0</int>
</lst>
<int name="gap">20</int>
<int name="start">0</int>
<int name="end">100</int>
</lst>
</lst>
 
从结果可以看到,价格位于 0-20 有10篇命中,20-40有30篇命中,其余区间无命中。那么我们就可以通过facet的命中结果,自实现动态价格区间,如 0-20  20以上,至此完成了价格区间的导航生成。
 
Faceting 与 Grouping
两者在口语表达上是很相似的,区别在于展示维度不一样,即适用于不同的场景。例如,有以下三篇文档:
  Object 1
    name: Phaser 4620a
    ppm: 62
    product_range: 6
  Object 2
    name: Phaser 4620i
    ppm: 65
    product_range: 6
  Object 3
    name: ML6512
    ppm: 62
    product_range: 7
假如对域 "product_range" 进行 group 操作,得到的结果是2,并可以返回topN条记录,类似于数据库group by。对域 "ppm" 进行 facet 操作,返回的结果是62有2篇,65有1篇,只有统计结果,不会返回详细记录。所以,应该根据应用场景选择合适的展现方式,从而决定使用 facet  还是 group 。
 
小结
Facet的目标是基于检索结果,生成服务性导航目录 ,引导用户在大结果集下,更有效地命中目标。常用实现方式有 Facet-Query, Field-Value Faceting, Range Faceting。 
 
More: 更详尽的命令参数与Pivot功能,请另行参考相关文档。
 
参考资料
apache-solr-ref-guide-5.3.pdf
http://wiki.apache.org/solr/SimpleFacetParameters
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314764-1-1.html 上篇帖子: solr搜索智能提示Suggest 下篇帖子: solr的参考资料
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表