1??分组查询
概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询:
?
1.1???? Facet分组
solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索,
?Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计。
?
Solr Fact提供了4种类型的Fact
?
-
?
-
?
<lstname="facet_queries"/>
-
?
<lstname="facet_fields"/>
-
?
-
?
<lstname="facet_ranges"/>
-
?
-
?
facet_queries:代表自定义条件查询facet,类似数据库的count函数
-
?
facet_fields :代表根据字段分组查询,类似数据库的groupby count的组合
-
?
-
?
facet_ranges:当然了,日期有区间,数字也有,这个就是根据数字分组查询
?
?
?
说明:
facet的基本功能就是对搜索结果中的数据进行分类。
facet用法
?
-
?
-
?
facet=on 或 facet=true表示功能开启
-
?
-
?
-
?
facet.offict 表示从第几条开始,主要用于分页
-
?
?
Range Facet
一般用于date类型或数字类型的字段。
?
-
?
-
?
&facet.query=date:[2009-1-1T0:0:0ZTO 2010-1-1T0:0:0Z]
?
?
参数说明
?
-
?
facet.range 需要做facet查询的字段
-
?
-
?
-
?
facet.range.gap 限定每一段范围的区间差值
-
?
facet.range.hardend 指定如何处理最后一个区间
-
?
facet.range.include 指定如何处理临界值
-
?
facet.range.other 指定如何处理限定范围以为的结果
-
?
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实现对数字、字符串或日期字段的聚合统计查询,即:min、max、avg、count、sum的功能
?
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
