一、什么是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=onfacet.fields=品牌facet.fields=车系 http://localhost:8080/solr/select/?q=*:*&facet=on&facet.field=品牌&facet.field=车系
...... ... 1 1 1 1 1
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字段。
...... ... 1 1
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
0 0 0 2 2
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