Solr高级查询Facet

一、什么是facet

       solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索。

       facet主要用于导航实现渐进式精确搜索,从两张图来看看Facet用途。 (图1)当进入重庆二手车列表时搜索条件会列出所有品牌、车系、价格区间、车系年贷款等等。 (图2)当你点击大众时页面刷新车系会列出大众所属的所有车系、价格区间。顾名思义我虽solr facet的理解也就是:  当然,你从京东导航、淘宝导航也能看到如此效果,这样的场景下就是solr facet扮演的角色。

 

二、facet查询

      在接触facet查询过程中可以在solr控制台里多观察查询路径的变化及返回response的变化。

2.1 facet.field使用

q=条件
facet=true or facet=on
facet.fields=品牌
facet.fields=车系 http://localhost:8080/solr/select/?q=*:*&facet=on&facet.field=品牌&facet.field=车系
复制代码
<response>
    <lst name="responseHeader">......</lst>
    <result name="response" numFound="6" start="0">...</result> <lst name="facet_counts"> <lst name="facet_queries" /> <lst name="facet_fields"> <lst name="品牌"> <int name="大众">1</int> <int name="奥迪">1</int> <int name="宝马">1</int> </lst> <lst name="车系"> <int name="POLO">1</int> <int name="迈腾">1</int> </lst> </lst> <lst name="facet_dates" /> <lst name="facet_ranges" /> </lst> </response> 
复制代码

 

2.2 facet.query 查询

      facet.query类似于filter query的语法。可以提供自定义区间查询,可以对任何字段进行区间筛选。   

 

复制代码
q=条件
facet=true
&facet.query=price:[*+TO+3]
&facet.query=price:[3.01+TO+5]
http://localhost:8080/solr/select/?q=*:*&fq=price%3A%5B3.01+TO+5%5D+&facet=true  //注意使用facet.query时不再是facet.query字段,而是fq字段。
复制代码

 

复制代码
<response>
    <lst name="responseHeader">......</lst>
    <result name="response" numFound="6" start="0">...</result> <lst name="facet_counts"> <lst name="facet_queries"> <int name="price:[*+TO+3]">1</int> <int name="price:[3.01+5]">1</int> </lst> <lst name="facet_fields"/> <lst name="facet_dates" /> <lst name="facet_ranges" /> </lst> </response> 
复制代码

2.3 facet.Date

http://localhost:8080/solr/select?q=*:*&rows=0&facet=true&facet.date=added&facet.date.start=NOW/DAY-30DAYS&facet.date.end=NOW/DAY&facet.date.gap=+7DAY
<int name="2010-11-08T00:00:00Z">0</int> <int name="2010-11-15T00:00:00Z">0</int> <int name="2010-11-22T00:00:00Z">0</int> <int name="2010-11-29T00:00:00Z">2</int> <int name="2010-12-06T00:00:00Z">2</int> 

 

2.4 key操作符

&facet=on

&facet.field={!key=中央处理器}cpu

&facet.field={!key=显卡}videoCard

 

2.5 什么字段适合用facet呢?     

      facet中适宜的字段一般代表某个实体的公共属性,比如品牌、型号、价格区间、作者、厂商、书籍出版商等。

四、facet参数

facet.prefix  –   限制constaints的前缀

facet.mincount=0 –  限制constants count的最小返回值,默认为0

facet.sort=count –  排序的方式,根据count或者index

facet.offset=0   表示在当前排序情况下的偏移,可以做分页

facet.limit=100 –  constraints返回的数目

facet.missing=false –  是否返回没有值的field

facet.date –  Deprecated, use facet.range

facet.query

facet.method  取值为enum或fc,默认为fc.该字段表示了两种Facet的算法,与执行效率相关.

facet.date、facet.date.start、facet.date.end、facet.date.gap、facet.date.hardend

wiki   https://wiki.apache.org/solr/SimpleFacetParameters

 

参考资料

http://www.coin163.com/java/docs/201310/d_3010029802.html

http://www.tuicool.com/articles/Iv2UjiU

http://blog.csdn.net/zhangshuliai/article/details/8022316

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值