- 使用场景:基于索引词(terms)将搜索结果安排到类别(categories)中,通过缩小搜索结果在搜索期间提供更好的用户体验。
- 分面搜索的输出:为每个搜索项找到的数字计数。
- 分面的字段属性:indexed或docValues之一必须为true,但不是都必须为true。
1.facet的一般参数
facet - "true" 启用faceting计数;"false"或blank或missing value,不启用faceting,默认值是blank。
facet.query - 可以指定Lucene语法形式的任意query来生成faceting计数。使用facet.query来覆盖默认检查字段,并精确指定你希望计数的词或正则式,可以指定多个facet.query参数。
例如直接修改URL:http://主机名:8983/solr/mycollection/select?facet.query=creation_date:清代&facet=on&q=title:犬)
,则会显示该字段下的分面数据数量。
![](https://img.haomeiwen.com/i3496844/c3b0664915c9a5bc.png)
2.分面的类型
2.1字段分面(Field-value Faceting)
- facet.field - 指定分面字段,可多次指定。至少指定一个,其他参数才有效果。
例如查询subject_matter字段的所有分面数据的URL:http://主机名:8983/solr/mycollection/select?facet.field=subject_matter&facet=on&q=*:*
![](https://img.haomeiwen.com/i3496844/74cb1233d0193de5.png)
- facet.prefix - 限制分面term为指定前缀。按字段指定参数:f.<fieldname>.facet.prefix
- facet.sort - count 按计数排序,最高的在前。index 按字符顺序。
- facet.limit - 默认值为100, 负值表示不限.
- facet.missing - 如果设置为true, 会返回匹配查询但没有facet的所有结果的计数。默认为false.
2.2范围分面(Range Faceting)
可以在支持范围查询的日期或数字字段上使用范围构面。此功能有助于通过对范围中的参考字段进行分块来提供更好的用户体验。
- facet.range - 按范围指定要分面的字段。例如指定价格和年龄:facet.range=price&facet.range=age
- facet.range.start - 指定构面范围的开始。例如:f.price.facet.range.start=0.0
- facet.range.end -指定构面范围的开始。例如:f.price.facet.range.end=1000.0&
- facet.range.gap -指定范围的跨度作为要添加到下限的值。例如:f.price.facet.range.gap=100
2.3区间分面(Interval Faceting)
区间分面允许设置区间范围和统计在这个范围内计数。 虽然与范围分面有类似的功能,但是两个方法实现却不同,而且根据上下文的不同性能也不一样。
- facet.interval - 指定字段,例如:facet.interval=price&facet.interval=size
- facet.interval.set - 间隔设置,例如:f.price.facet.interval.set=[0,10]&f.price.facet.interval.set=(10,100]
区间必须以’(‘或’[‘开头,跟随一个结束值,然后是逗号(‘,’),然后是开始值,然后以’)’或’]’结尾,开始值和结束值值不能为空。 比如:
(1,10) -> 大于1,小于10
[1,10) -> 大于等于1,小于10
[1,10] -> 大于等于1,小于等于10
2.3分面查询之后获得具体数据
自己想了一种不算很标准的做法:重新构建URL,在filter query增加一个查询条件,即facet.field的字段。
举例说明:
查询所有标题带有“犬”字的国画,以材质技法(subject_matter)为分面字段进行查询,构建URL:http://主机名:8983/solr/mycollection/select?facet.field=subject_matter&facet=on&q=title:犬
查询结果共12条数据,在subject_matter下分为6类,每一类的数目如下图:
![](https://img.haomeiwen.com/i3496844/48056796e1e2e65a.png)
![](https://img.haomeiwen.com/i3496844/d7da02a4f40c31f2.png)
现想要得到subject_matter=花鸟
这一类下的两个数据,则可以重新构建URL:http://主机名:8983/solr/mycollection/select?fq=subject_matter:花鸟&q=title:犬
得到这两个数据
![](https://img.haomeiwen.com/i3496844/aad3fc61e505f03a.png)
若要按照某个字段(如id)排序,则在sort下输入id asc
或者id desc
进行查询结果的顺序返回。
网友评论