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. thinkphp3.2笔记(2)调试模式,配置项C,创建模块, 四种URL模式,URL生成,跳转

    一.调试模式 TP的调试模式其实就控制了TP关于配置信息以及函数的缓存功能 如果开启了调试模式,每次访问项目,Tp都会去加载最新的配置以及函数信息. 如果关闭了调试模式,当tp第一次访问时会降配置以及 ...

  2. 为什么要使用MQ消息中间件?它解决了什么问题?

    1.应用场景 1.1 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以 ...

  3. Java实现时钟小程序【代码】

    哎,好久没上博客园发东西了,上一次还是两个月前的五一写的一篇计算器博客,不过意外的是那个程序成了这学期的Java大作业,所以后来稍微改了一下那个程序就交了上去,这还是美滋滋.然后五月中旬的时候写了一个 ...

  4. mysql数据库的备份及免密码上传

    主要利用了mysqldump和sshpass进行备份和免密上传 以下是代码实现: #!/bin/bash #该脚本放在主服务器运行 #从服务器账号密码ipremotehost="xxxxxx ...

  5. 使用Bootstrap插件datapicker获取时间

    引入css和js <link rel="stylesheet" href="/${appName}/commons/css/datapicker/datepicke ...

  6. hdu2516斐波那契博弈

    刚开始想用sg函数做,想了半天没一点思路啊. 原来这是一个新题型,斐波那契博弈 斐波那契博弈模型:有一堆个数为 n 的石子,游戏双方轮流取石子,满足:1. 先手不能在第一次把所有的石子取完:2. 之后 ...

  7. windows下的IO模型之异步选择(WSAAsyncSelect)模型

    异步选择(WSAAsyncSelect)模型是一个有用的异步I/O 模型.其核心函数是WSAAsyncSelect,该函数是非阻塞的 (关于异步io的理解详情可以看:http://www.cnblog ...

  8. less 全局变量使用

    less 全局变量使用 忽然想定义一个变量,但是却需要每个 .vue 文件都需要单独引入这个全局变量才可以,导致很多重复不必要的工作,因而得寻找一种可以任何地方都可以访问的方法 借助换肤这个功能 sa ...

  9. excel 应用,右下角的小十字拖拽的时候形成递减的数列

    excel 应用,右下角的小十字拖拽的时候形成递减的数列 2012-12-20 15:16无良小鬼 | 浏览 352 次 比如说我想要这样一列数字201220112010……这样递减的数列,而不是递增 ...

  10. c++的c风格字符串函数的实现

    要注意使用断言判断传入的字符串非空. #include <cassert> //求字符串长度 size_t StrLen(const char *str) { assert(str != ...