facet和group都是用于分组的,facet倾向于统计,group倾向于SQL中group by(有详细的组内数据)。
下面两张表是常用的属性列表:
参数 | 类型 | 说明 |
start | 整数 | 对分组的组进行分页 |
rows | 整数 | 对分组的组进行分页 |
sort | 排序算法 | |
group | on(代码层面是boolean) | 默认是关闭,要主动开启 |
group.query | 查询语句 | 单个目标统计语法 |
group.field | 字符串 | 分组统计目标字段 |
group.offset | 整数 | group.value的分页 |
group.limit | 整数 | group.value的分页 |
group.sort | 排序算法 | |
group.func | 查询语句 | 可以指定查询函数 |
group.main | 布尔值 | 设为ture,结果将主要由第一个分组命令决定 |
group.format | grouped/simple | 设置为simple可以使得结果以单一列表形式返回 |
group.ngroups | 布尔值 | 设为true,将返回分组数量,默认是false |
group.truncate | 布尔值 | 设为true时,facet数量将基于group分组中匹相关性高的文档,默认fasle |
group.cache.percent | 整数0-100 | 设为大于0时,表示缓存结果,默认为0。该项对于布尔查询,通配符查询,模糊查询有改善,却会减慢普通词查询。 |
参数 | 说明 |
facet | on(代码层面是boolean),要主动开启 |
facet.query | 单个目标统计语法 |
facet.offset | facet.fields内分页(简单理解,带前缀,处理的一定是小范围的前缀内数据) |
facet.limit | facet.fields内分页 |
facet.sort | |
facet.field | 目标分组统计字段 |
facet.prefix | 以此值为前辍的terms才会作为Facet |
facet.contains | 字符串包含此值的terms才会作为Facet |
facet.contains.ingoreCase | 匹配 facet.contains 条件时,忽略大小写 |
facet.minCount | 设置最小的数量。限制了Facet字段值的最小count,默认为0.合理设置该参数可以将用户的关注点集中在少数比较热门的领域.相当于group by having |
facet.missing | 默认值false. 如果设置为true或者on,那么将统计那些该Facet字段值为null的记录 |
facet.method | facet的算法。三个可选值:enum, fc(默认值),fcs;enum适用于字段值比较少的情况,比如字段类型为布尔型,或者字段表示中国的所有省份 |
facet.exists | 用于facet.method=enum的情况 |
facet.excludeTerms | 排除某些terms |
facet.threads | 获得facet的计算的线程数 |
facet.date | 该参数表示需要进行Date Facet的字段名,与facet.field一样,该参数可以被设置多次,表示对多个字段进行Date Facet |
facet.date.start | 起始时间 |
facet.date.end | 结束时间 |
facet.date.gap | 时间间隔.如果start为2009-1-1,end为2010-1-1.gap设置为+1MONTH表示间隔1个月,那么将会把这段时间划分为12个间隔段。注意+因为是特殊字符所以应该用%2B代替 |
facet.date.hardend | 取值可以为true|false,默认为false.它表示gap迭代到end处采用何种处理.举例说明start为2009-1-1,end为2009-12-25,gap为+1MONTH; hardend为false的话最后一个时间段为2009-12-1至2010-1-1; hardend为true的话最后一个时间段为2009-12-1至2009-12-25 |
facet.date.other | 取值范围为before|after|between|none|all,默认为none,before会对start之前的值做统计,after会对end之后的值做统计,between会对start至end之间所有值做统计.如果hardend为true的话,那么该值就是各个时间段统计值的和.none表示该项禁用.all表示before,after,all都会统计 |
facet.rangs | 范围统计分组统计,跟Date Facet一样,只是他们定位的字段的类型不同,Data Fact是做日期的分组统计的,而Fact Range是做数字分组统计的,在次强调,是做数字分组统计的,对于字符串,日期是不可以的 |
facet.rangs.start | |
facet.rangs.end | |
facet.rangs.gap | |
facet.rangs.hardend | |
facet.rangs.other | |
facet.rangs.include |
上述两张表,可以供为字典查询。
通俗的讲,要如何理解和正确使用这两种分组呢?
Facet请求路径: http://127.0.0.1:8983/solr/jdbook/select?q=*:*&facet=on&facet.field=bookName&rows=0&facet.offset=0&facet.limit=10
响应结果:
{
"responseHeader":{
"status":0,
"QTime":13,
"params":{
"q":"*:*",
"facet.limit":"10",
"facet.field":"bookName",
"rows":"0",
"facet":"on",
"facet.offset":"0"}},
"response":{"numFound":286192,"start":0,"docs":[]
},
"facet_counts":{
"facet_queries":{},
"facet_fields":{
"bookName":[
"红楼梦",125,
"学生版四大名著 红楼梦+西游记+水浒传+三国演义/新课标必读分级课外阅读青少版",58,
"极简:中国书法史 获得2014中国好书",49,
"红楼梦原著版",42,
"金镖王与锅铲侠",36,
"中国城投",24,
"极简中国书法史 荣获2014中国好书 人民美术出版社",24,
"极简中国工艺美术史+中国古代雕塑史+中国古代绘画史+中国古代建筑史+极简中国书法史",24,
"极简中国艺术史",24,
"人性的弱点",23]},
"facet_ranges":{},
"facet_intervals":{},
"facet_heatmaps":{}}}
Group请求:http://127.0.0.1:8983/solr/jdbook/select?q=*:*&group=on&group.field=bookName&rows=2&group.limit=1&group.field=bookIsbn&start=0
请求响应:
{
"responseHeader":{
"status":0,
"QTime":31,
"params":{
"q":"*:*",
"group.limit":"1",
"start":"0",
"rows":"2",
"group.field":["bookName",
"bookIsbn"],
"group":"on"}},
"grouped":{
"bookName":{
"matches":286192,
"groups":[{
"groupValue":"小婴孩:早识300字",
"doclist":{"numFound":1,"start":0,"docs":[
{
"bookName":"小婴孩:早识300字",
"bookIsbn":"9787538623857",
"id":"17616413-6adc-42d1-86ce-17aa4757a2c9",
"_version_":1654035829756002304}]
}},
{
"groupValue":"中国音乐家协会社会音乐水平考级教材:全国少儿歌唱考级作品集2",
"doclist":{"numFound":2,"start":0,"docs":[
{
"bookName":"中国音乐家协会社会音乐水平考级教材:全国少儿歌唱考级作品集2",
"bookIsbn":"9787539630007",
"id":"c6a9efcf-5356-479f-bf56-734bbc054e3d",
"_version_":1654035829878685696}]
}}]},
"bookIsbn":{
"matches":286192,
"groups":[{
"groupValue":"9787538623857",
"doclist":{"numFound":1,"start":0,"docs":[
{
"bookName":"小婴孩:早识300字",
"bookIsbn":"9787538623857",
"id":"17616413-6adc-42d1-86ce-17aa4757a2c9",
"_version_":1654035829756002304}]
}},
{
"groupValue":"9787539630007",
"doclist":{"numFound":3,"start":0,"docs":[
{
"bookName":"中国音乐家协会社会音乐水平考级教材:全国少儿歌唱考级作品集2",
"bookIsbn":"9787539630007",
"id":"c6a9efcf-5356-479f-bf56-734bbc054e3d",
"_version_":1654035829878685696}]
}}]}}}
-> 这两个请求,应该可以基本满足对查询参数的理解。
实际使用场景:
facet:
group:
表达还需提高!...