Solr聚合查询
1 分组查询
1.1 Facet分组
solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索,
Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计。
Solr Fact提供了4种类型的Fact
- <lstname="facet_counts">
- <lstname="facet_queries"/>
- <lstname="facet_fields"/>
- <lstname="facet_dates"/>
- <lstname="facet_ranges"/>
- </lst>
- facet_queries:代表自定义条件查询facet,类似数据库的count函数
- facet_fields :代表根据字段分组查询,类似数据库的groupby count的组合
- facet_dates:根据日期区间分组查询
- facet_ranges:当然了,日期有区间,数字也有,这个就是根据数字分组查询
说明:
facet的基本功能就是对搜索结果中的数据进行分类。
facet用法
- facet.field:指定要分类的字段
- facet=on 或 facet=true表示功能开启
- facet.prefix 表示字段前缀
- facet.limit 表示返回的记录数
- facet.offict 表示从第几条开始,主要用于分页
- facet.query可以任意定义查询
Range Facet
一般用于date类型或数字类型的字段。
- &facet=on
- &facet.query=date:[2009-1-1T0:0:0ZTO 2010-1-1T0:0:0Z]
参数说明
- facet.range 需要做facet查询的字段
- facet.range.start 设置起始点
- facet.range.end 设置终止点
- 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
Solr聚合查询的更多相关文章
- Solr 排除查询
前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...
- 【solr】之solr界面查询返回距离并排序
使用solr界面查询 {!geofilt}距离函数 star:[4 TO 5]星级排序 geodist() desc 距离排序 pt :31.221717,121.580891 sfield:loca ...
- python操作mongodb之二聚合查询
#聚合查询 from pymongo import MongoClient db = MongoClient('mongodb://10.0.0.9:27017/').aggregation_exam ...
- 【转】Solr客户端查询参数总结
今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...
- crm使用FetchXml聚合查询
/* 创建者:菜刀居士的博客 * 创建日期:2014年07月08号 */ namespace Net.CRM.FetchXml { using System; using Micr ...
- [SQL基础教程] 3-1 对表进行聚合查询
[SQL基础教程] 3-1 对表进行聚合查询 聚合函数 用于合计的函数称为聚合函数或者集合函数 COUNT SUM AVG MAX MIN SELECT COUNT(*) FROM table; SE ...
- 开发中使用mongoTemplate进行Aggregation聚合查询
笔记:使用mongo聚合查询(一开始根本没接触过mongo,一点一点慢慢的查资料完成了工作需求) 需求:在订单表中,根据buyerNick分组,统计每个buyerNick的电话.地址.支付总金额以及总 ...
- mongodb高级聚合查询
在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mo ...
- ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询
聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...
随机推荐
- Autofac Mvc注入
private void DependencyInjection() { var builder = new ContainerBuilder(); builder.RegisterControlle ...
- Python的第一次作业
题目1 : 描述:通过趣味的打怪来学习random随机函数. 代码: from random import * import types choc=0 hs=[100] numer=[randint( ...
- UVALive-3645 Objective: Berlin (最大流:时序模型)
题目大意:有n个城市,m条航班.已知每条航班的起点和终点,还有每条航班的载客量.出发时间.到达时间.并且要求在任何一个城市(起点.终点除外)都至少要有30分钟的中转时间,求起点到终点的最大客流量. 题 ...
- TryUpdateModel方法 模型绑定
文档资料:https://msdn.microsoft.com/zh-cn/library/ee728634.aspx 有很多重载其中 Controller.TryUpdateModel<TMo ...
- BZOJ1074 [SCOI2007]折纸origami
我们先看每个点可能从哪些点折过来的,2^10枚举对角线是否用到. 然后再模拟折法,查看每个点是否满足要求. 恩,计算几何比较恶心,还好前几天刚写过一道更恶心的计算几何,点类直接拷过来2333. /** ...
- Virtualbox安装Windows 8.1遇到0x000000C4错误解决办法 - 转
想要尝试一下 Windows 8.1 系统,又不愿意在电脑上直接安装,虚拟机提供了很好的平台.因为平时工作需要,其实电脑上装的虚拟机还是不少的,每天都要开着几个虚拟机一起用.多一个不多,于是尝试在自己 ...
- c#实现对登陆信息的反馈,实现对网站登录密码的扫描
最近发现我们学校的电信上网改密码的页面很简单,没有验证码,于是我就很好奇,后来发现原来是我们学校的电信的那个改密码的页面有漏洞于是就可以通过扫描账号免费上网 原理就是对修改密码的页面进行POST请求 ...
- Monkey测试练习
1.下载Android SDK 2.打开SDK Manager.exe自动下载 3.配置环境变量 将platform-tools的路径(如: C:\001myWorkspace\eclipse(MAV ...
- 使用catch做单元测试简介
开始使用catch呢! catch的好处是,它只有一个头文件, 坏处是,它需要C++11,不过不是很坏. catch有两种测试用例的书写方式: Normal unsigned int Factoria ...
- 转:MyISAM 和 InnoDB 讲解
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISA ...