Solr聚合查询

1  分组查询

概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询:
 

1.1     Facet分组

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

 Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计。

Solr Fact提供了4种类型的Fact

  1.  
    <lstname="facet_counts">
  2.  
    <lstname="facet_queries"/>
  3.  
    <lstname="facet_fields"/>
  4.  
    <lstname="facet_dates"/>
  5.  
    <lstname="facet_ranges"/>
  6.  
    </lst>
  7.  
    facet_queries:代表自定义条件查询facet,类似数据库的count函数
  8.  
    facet_fields :代表根据字段分组查询,类似数据库的groupby count的组合
  9.  
    facet_dates:根据日期区间分组查询
  10.  
    facet_ranges:当然了,日期有区间,数字也有,这个就是根据数字分组查询

说明:

facet的基本功能就是对搜索结果中的数据进行分类。

facet用法

  1.  
    facet.field:指定要分类的字段
  2.  
    facet=on 或 facet=true表示功能开启
  3.  
    facet.prefix 表示字段前缀
  4.  
    facet.limit 表示返回的记录数
  5.  
    facet.offict 表示从第几条开始,主要用于分页
  6.  
    facet.query可以任意定义查询

Range Facet

一般用于date类型或数字类型的字段。

 

  1.  
    &facet=on
  2.  
    &facet.query=date:[2009-1-1T0:0:0ZTO 2010-1-1T0:0:0Z]

参数说明

  1.  
    facet.range 需要做facet查询的字段
  2.  
    facet.range.start 设置起始点
  3.  
    facet.range.end 设置终止点
  4.  
    facet.range.gap 限定每一段范围的区间差值
  5.  
    facet.range.hardend 指定如何处理最后一个区间
  6.  
    facet.range.include 指定如何处理临界值
  7.  
    facet.range.other 指定如何处理限定范围以为的结果
  8.  
    facet.range.method 指定facet算法

如下查询:

http://localhost:8983/solr/solr_select/query?q=*:*&facet=on&facet.field=name

根据name字段分组查询结果

1.2     Group分组

Solr对结果的分组处理除了facet还可以使用group。Solr的group是根据某一字段对结果分组,将每一组内满足查询的结果按顺序返回。

Group对比Facet

Group和Facet的概念很像,都是用来分组。Facet返回所有相关的结果并允许用户基于facet的目录重新定义结果集。Facet可以对分组数量进行过滤,以及排序,和日期范围,时间范围分组,但是如果你想得到具体的数据,还得需要查询一次或多次。group可以得到分组的组数量,一次请求,可以拿到所有的数据。

Group和Facet可以结合起来使用,但只能使用facet.field和facet.range,还不支持日期date和维度统计pivot faceting.

如下查询:

http://localhost:8983/solr/solr_select/query?q=*:*&group=true&group.field=name

参数说明:

参数 类型 说明
group 布尔值 设为true,表示结果需要分组
group.field 字符串 需要分组的字段,字段类型需要时是StrField或TextField
group.func 查询语句 可以指定查询函数
group.query 查询语句 可以指定查询语句
rows 整数 返回多少组结果,默认10
start 整数 指定结果开始位置/偏移量
group.limit 整数 每组返回多数条结果,默认1
group.offset 整数 指定每组结果开始位置/偏移量
sort 排序算法 控制各个组的返回顺序
group.sort 排序算法 控制每一分组内部的顺序
group.format grouped/simple 设置为simple可以使得结果以单一列表形式返回
group.main 布尔值 设为true时,结果将主要由第一个字段的分组命令决定
group.ngroups 布尔值 设为true时,Solr将返回分组数量,默认fasle
group.truncate 布尔值 设为true时,facet数量将基于group分组中匹相关性高的文档,默认fasle
group.cache.percent 整数0-100 设为大于0时,表示缓存结果,默认为0。该项对于布尔查询,通配符查询,模糊查询有改善,却会减慢普通词查询。

2      Stats Component聚合查询

摘要: Solr可以利用StatsComponent实现对数字、字符串或日期字段的聚合统计查询即:minmaxavgcountsum的功能

 

Stats Component参数说明:

参数 描述
stats 布尔值,设为true,表示开启Stats Component
stats.field 指定需要做统计的字段
stats.facet 对指定的facet生成一个子结果集
stats.calcdistinct 布尔值,将会返回”countDistinct”和”distinctValues”,其代价很高。默认fasle

stats Component统计内容

统计项目 描述 支持的类型 是否默认输出
min 最小值 所有
max 最大值 所有
sum 数字、日期
count 个数 所有
missing 空值的个数 所有
sumOfSquares 平方和 数字、日期
mean 均值 数字、日期  
stddev 标准差 数字、日期
percentiles 精度/小数点后几位 数字
distinctValues set/不重复值集合 所有
countDistinct set精确个数/不重复值集合大小,使用代价很大 所有
cardinality set个数/不重复值集合大小,可能不准确 所有

如下查询:

http://localhost:8983/solr/solr_select/select?q=*:*&stats=true&stats.field=id&rows=0&indent=true

猜你喜欢

转载自www.cnblogs.com/cuihongyu3503319/p/9337515.html