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实现对数字、字符串或日期字段的聚合统计查询,即: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聚合查询的更多相关文章

  1. Solr 排除查询

    前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...

  2. 【solr】之solr界面查询返回距离并排序

    使用solr界面查询 {!geofilt}距离函数 star:[4 TO 5]星级排序 geodist() desc 距离排序 pt :31.221717,121.580891 sfield:loca ...

  3. python操作mongodb之二聚合查询

    #聚合查询 from pymongo import MongoClient db = MongoClient('mongodb://10.0.0.9:27017/').aggregation_exam ...

  4. 【转】Solr客户端查询参数总结

    今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...

  5. crm使用FetchXml聚合查询

    /* 创建者:菜刀居士的博客  * 创建日期:2014年07月08号  */ namespace Net.CRM.FetchXml {     using System;     using Micr ...

  6. [SQL基础教程] 3-1 对表进行聚合查询

    [SQL基础教程] 3-1 对表进行聚合查询 聚合函数 用于合计的函数称为聚合函数或者集合函数 COUNT SUM AVG MAX MIN SELECT COUNT(*) FROM table; SE ...

  7. 开发中使用mongoTemplate进行Aggregation聚合查询

    笔记:使用mongo聚合查询(一开始根本没接触过mongo,一点一点慢慢的查资料完成了工作需求) 需求:在订单表中,根据buyerNick分组,统计每个buyerNick的电话.地址.支付总金额以及总 ...

  8. mongodb高级聚合查询

    在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mo ...

  9. ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询

    聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...

随机推荐

  1. R语言绘制正太分布图,并进行正太分布检验

    正态分布 判断一样本所代表的背景总体与理论正态分布是否没有显著差异的检验.   方法一概率密度曲线比较法 看样本与正太分布概率密度曲线的拟合程度,R代码如下: #画样本概率密度图s-rnorm(100 ...

  2. 关于 Flutter的Button按钮没有高度设置

    flutter 里面 RaisedButton.FloatingActionButton.FlatButton.OutlineButton 中四个button都无高度设置,如下用RaisedButto ...

  3. thinkphp3.2笔记(5)创建项目 创建模型 实例化

    一 创建项目 1 拷贝框架 目录   public   thinkphp  .htaccess  index.php    [application不用拷贝,会自动生成] 2   public 下面创 ...

  4. 递归--练习3--noi7592求最大公约数问题

    递归--练习3--noi7592求最大公约数问题 一.心得 两个低级错误:1. ll setMax(ll &m,ll &n)中无引用,结果只传值,没传地址2. return f(n,m ...

  5. [POI2012]ROZ-Fibonacci Representation (数学)

    大意:给定n, 求至少要多少个斐波那契数相加减后能得到n  (可以重复, 重复的算多次) 假设$dp(x)$为$x$的最小划分, 有$dp(x)=dp(x-F_k)+1$, 其中$F_k$为最接近$x ...

  6. HDU 5586 简单最大子段和变形

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  7. HDU 4004 二分

    The Frog's Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) ...

  8. URAL 1106 Two Teams (DFS)

    题意 小组里有N个人,每个人都有一个或多个朋友在小组里.将小组分成两个队伍,每个队伍的任意一个成员都有至少一个朋友在另一个队伍. 思路 一开始觉得和前几天做过的一道2-sat(每个队伍任意两个成员都必 ...

  9. SGU 144. Meeting 概率dp 几何概率分布 难度:0

    144. Meeting time limit per test: 0.25 sec. memory limit per test: 4096 KB Two of the three members ...

  10. ES6介绍二 函数的增强

    ES6对于函数的使用新增了很多实用的API,JS的函数跟很多后台语言PHP,ASP.NET开始看齐: 1. 参数默认值: 以前我们为了给函数创建默认值,必须用一种冗杂的语句,而且有歧义的语句. //E ...