Solr之Facet、Group的使用和区别

facet和group都是用于分组的,facet倾向于统计,group倾向于SQL中group by(有详细的组内数据)。

下面两张表是常用的属性列表:

Group参数
参数类型说明
start整数对分组的组进行分页
rows整数对分组的组进行分页
sort排序算法 
groupon(代码层面是boolean)默认是关闭,要主动开启
group.query查询语句单个目标统计语法
group.field字符串分组统计目标字段
group.offset整数group.value的分页
group.limit整数group.value的分页
group.sort排序算法 
group.func查询语句可以指定查询函数
group.main布尔值设为ture,结果将主要由第一个分组命令决定
group.formatgrouped/simple设置为simple可以使得结果以单一列表形式返回
group.ngroups布尔值设为true,将返回分组数量,默认是false
group.truncate布尔值设为true时,facet数量将基于group分组中匹相关性高的文档,默认fasle
group.cache.percent整数0-100设为大于0时,表示缓存结果,默认为0。该项对于布尔查询,通配符查询,模糊查询有改善,却会减慢普通词查询。
Facet参数
参数说明
faceton(代码层面是boolean),要主动开启
facet.query单个目标统计语法
facet.offsetfacet.fields内分页(简单理解,带前缀,处理的一定是小范围的前缀内数据)
facet.limitfacet.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.methodfacet的算法。三个可选值: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:

表达还需提高!...

参考文献:https://blog.csdn.net/lyf_ldh/article/details/82707401

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值