Solr高效利用:Solr实现SQL的查询与统计
1.如何高效使用Solr查询功能 ?
2.单个字段分组统计如何实现?
3.IN条件查询有几种方式?
4.多个字段分组统计是否只支持count?
Cloudera公司已经推出了基于Hadoop平台的查询统计分析工具Impala,只要熟悉SQL,就可以熟练地使用Impala来执行查询与分析的功能。不过Impala的SQL和关系数据库的SQL还是有一点微妙地不同的。
下面,我们设计一个表,通过该表中的数据,来将SQL查询与统计的语句,使用Solr查询的方式来与SQL查询对应。这个翻译的过程,是非常有趣的,你可以看到Solr一些很不错的功能。
用来示例的表结构设计,如图所示:
下面,我们通过给出一些SQL查询统计语句,然后对应翻译成Solr查询语句,然后对比结果
- SELECT log_id,start_time,end_time,prov_id,city_id,area_id,idt_id,cnt,net_type
- FROM v_i_event
- WHERE prov_id = 1 AND net_type = 1 AND area_id = 10304 AND time_type = 1 AND time_id >= 20130801 AND time_id <= 20130815
- ORDER BY log_id LIMIT 10;
复制代码
查询结果,如图所示:

- http://slave1:8888/solr-cloud/i_event/select?q=*:*&fl=log_id,start_time,end_time,prov_id,city_id,area_id,idt_id,cnt,net_type&fq=prov_id:1 AND net_type:1 AND area_id:10304 AND time_type:1 AND time_id:[20130801 TO 20130815]&sort=log_id asc&start=0&rows=10
复制代码
查询结果,如下所示:
- <response>
- <lst name="responseHeader">
- <int name="status">0</int>
- <int name="QTime">4</int>
- </lst>
- <result name="response" numFound="77" start="0">
- <doc>
- <int name="log_id">6827</int>
- <long name="start_time">1375072117</long>
- <long name="end_time">1375081683</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10304</int>
- <int name="idt_id">11002</int>
- <int name="cnt">0</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6827</int>
- <long name="start_time">1375072117</long>
- <long name="end_time">1375081683</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10304</int>
- <int name="idt_id">11000</int>
- <int name="cnt">0</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6851</int>
- <long name="start_time">1375142158</long>
- <long name="end_time">1375146391</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10304</int>
- <int name="idt_id">14001</int>
- <int name="cnt">5</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6851</int>
- <long name="start_time">1375142158</long>
- <long name="end_time">1375146391</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10304</int>
- <int name="idt_id">11002</int>
- <int name="cnt">23</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6851</int>
- <long name="start_time">1375142158</long>
- <long name="end_time">1375146391</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10304</int>
- <int name="idt_id">10200</int>
- <int name="cnt">55</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6851</int>
- <long name="start_time">1375142158</long>
- <long name="end_time">1375146391</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10304</int>
- <int name="idt_id">14000</int>
- <int name="cnt">4</int>
复制代码
- SELECT prov_id, SUM(cnt) AS sum_cnt, AVG(cnt) AS avg_cnt, MAX(cnt) AS max_cnt, MIN(cnt) AS min_cnt, COUNT(cnt) AS count_cnt
- FROM v_i_event
- GROUP BY prov_id;
复制代码
查询结果,如图所示:

- http://slave1:8888/solr-cloud/i_event/select?q=*:*&stats=true&stats.field=cnt&rows=0&indent=true
复制代码
查询结果,如下所示:
- <response>
- <lst name="responseHeader">
- <int name="status">0</int>
- <int name="QTime">2</int>
- </lst>
- <result name="response" numFound="4088" start="0"></result>
- <lst name="stats">
- <lst name="stats_fields">
- <lst name="cnt">
- <double name="min">0.0</double>
- <double name="max">1258.0</double>
- <long name="count">4088</long>
- <long name="missing">0</long>
- <double name="sum">32587.0</double>
- <double name="sumOfSquares">9170559.0</double>
- <double name="mean">7.971379647749511</double>
- <double name="stddev">46.69344567709268</double>
- <lst name="facets" />
- </lst>
- </lst>
- </lst>
- </response>
复制代码

Solr查询URL:
- http://slave1:8888/solr-cloud/i_event/select?q=*:*&fl=log_id,start_time,end_time,prov_id,city_id,area_id,idt_id, cnt,net_type&fq=prov_id:1 AND net_type:1 AND (city_id:106 OR city_id:103) AND (idt_id:12011 OR idt_id:5004 OR idt_id:6051 OR idt_id:6056 OR idt_id:8002)
AND time_type:1 AND time_id:[20130801 TO 20130815]&sort=log_id asc ,start_time desc&start=0&rows=10
复制代码
或
- http://slave1:8888/solr-cloud/i_event/select?q=*:*&fl=log_id,start_time,end_time,prov_id,city_id,area_id,idt_id, cnt ,net_type&fq=prov_id:1&fq=net_type:1&fq=(city_id:106 OR city_id:103)&fq=(idt_id:12011 OR idt_id:5004 OR idt_id:6051 OR idt_id:6056 OR idt_id:8002)&fq=time_type:1&fq=time_id:[20130801
TO 20130815]&sort=log_id asc,start_time desc&start=0&rows=10
复制代码
查询结果,如下所示:
- <response>
- <lst name="responseHeader">
- <int name="status">0</int>
- <int name="QTime">6</int>
- </lst>
- <result name="response" numFound="63" start="0">
- <doc>
- <int name="log_id">6553</int>
- <long name="start_time">1374054184</long>
- <long name="end_time">1374054254</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10307</int>
- <int name="idt_id">12011</int>
- <int name="cnt">0</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6553</int>
- <long name="start_time">1374054184</long>
- <long name="end_time">1374054254</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10307</int>
- <int name="idt_id">5004</int>
- <int name="cnt">2</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6555</int>
- <long name="start_time">1374055060</long>
- <long name="end_time">1374055158</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">70104</int>
- <int name="idt_id">5004</int>
- <int name="cnt">3</int>
- <int name="net_type">1</int>
复制代码

- http://slave1:8888/solr-cloud/i_event/select?q=*:*&fl=log_id,start_time,end_time,prov_id,city_id,area_id,idt_id,cnt,net_type&fq=net_type:1 AND (idt_id:12011 OR idt_id:5004 OR idt_id:6051 OR idt_id:6056 OR idt_id:8002) AND time_type:1 AND start_time:[1373598465
TO 1374055254]&fq =-start_time:1374055254&sort=log_id asc,start_time asc,idt_id desc&start=0&rows=30
复制代码
或
- http://slave1:8888/solr-cloud/i_event/select?q=*:*&fl=log_id,start_time,end_time,prov_id,city_id,area_id,idt_id,cnt,net_type&fq=net_type:1 AND (idt_id:12011 OR idt_id:5004 OR idt_id:6051 OR idt_id:6056 OR idt_id:8002) AND time_type:1 AND start_time:[1373598465
TO 1374055254] AND -start_time:1374055254&sort=log_id asc,start_time asc,idt_id desc&start=0&rows=30
复制代码
- http://slave1:8888/solr-cloud/i_event/select?q=*:*&fl=log_id,start_time,end_time,prov_id,city_id,area_id,idt_id,cnt,net_type&fq=net_type:1&fq=idt_id:12011 OR idt_id:5004 OR idt_id:6051 OR idt_id:6056 OR idt_id:8002&fq =time_type:1&fq=start_time:[1373598465
TO 1374055254]&fq =-start_time:1374055254&sort=log_id asc,start_time asc,idt_id desc&start=0&rows=30
复制代码
查询结果,如下所示:
- <response>
- <lst name="responseHeader">
- <int name="status">0</int>
- <int name="QTime">5</int>
- </lst>
- <result name="response" numFound="4" start="0">
- <doc>
- <int name="log_id">6553</int>
- <long name="start_time">1374054184</long>
- <long name="end_time">1374054254</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10307</int>
- <int name="idt_id">12011</int>
- <int name="cnt">0</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6553</int>
- <long name="start_time">1374054184</long>
- <long name="end_time">1374054254</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">10307</int>
- <int name="cnt">2</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6555</int>
- <long name="start_time">1374055060</long>
- <long name="end_time">1374055158</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">70104</int>
- <int name="idt_id">12011</int>
- <int name="cnt">0</int>
- <int name="net_type">1</int>
- </doc>
- <doc>
- <int name="log_id">6555</int>
- <long name="start_time">1374055060</long>
- <long name="end_time">1374055158</long>
- <int name="prov_id">1</int>
- <int name="city_id">103</int>
- <int name="area_id">70104</int>
- <int name="idt_id">5004</int>
- <int name="cnt">3</int>
- <int name="net_type">1</int>
- </doc>
- </result>
- </response>
复制代码

- http://slave1:8888/solr-cloud/i_event/select?q=*:*&facet=true&facet.pivot=city_id,area_id&fq=prov_id:1 AND net_type:1&rows=0&indent=true
复制代码
- SELECT city_id, area_id, COUNT(cnt) AS count_cnt
- FROM v_i_event
- WHERE prov_id = 1 AND net_type = 1
- GROUP BY city_id;
- SELECT city_id, area_id, COUNT(cnt) AS count_cnt
- FROM v_i_event
- WHERE prov_id = 1 AND net_type = 1
- GROUP BY area_id;
复制代码
查询结果,不再显示。
- >http://slave1:8888/solr-cloud/i_event/select?q=*:*&stats=true&stats.field=cnt&f.cnt.stats.facet=city_id&&f.cnt.stats.facet=area_id&fq=prov_id:1 AND net_type:1&rows=0&indent=true
复制代码
- <response>
- <lst name="responseHeader">
- <int name="status">0</int>
- <int name="QTime">72</int>
- </lst>
- <result name="response" numFound="1171" start="0"></result>
- <lst name="facet_counts">
- <lst name="facet_queries" />
- <lst name="facet_fields" />
- <lst name="facet_dates" />
- <lst name="facet_ranges" />
- <lst name="facet_pivot">
- <arr name="city_id,area_id">
- <lst>
- <str name="field">city_id</str>
- <int name="value">103</int>
- <int name="count">678</int>
- <arr name="pivot">
- <lst>
- <str name="field">area_id</str>
- <int name="value">10307</int>
- <int name="count">298</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">10315</int>
- <int name="count">120</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">10317</int>
- <int name="count">86</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">10304</int>
- <int name="count">67</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">10310</int>
- <int name="count">49</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">70104</int>
- <int name="count">48</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">10308</int>
- <int name="count">6</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">0</int>
- <int name="count">2</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">10311</int>
- <int name="count">2</int>
- </lst>
- </arr>
- </lst>
- <lst>
- <str name="field">city_id</str>
- <int name="value">0</int>
- <int name="count">463</int>
- <arr name="pivot">
- <lst>
- <str name="field">area_id</str>
- <int name="value">0</int>
- <int name="count">395</int>
- </lst>
- <lst>
- <str name="field">area_id</str>
- <int name="value">10307</int>
- <int name="count">68</int>
复制代码

---------------------
本文来自 Eric-L90 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/brotherdong90/article/details/52690163?utm_source=copy
Solr高效利用:Solr实现SQL的查询与统计的更多相关文章
- Solr实现SQL的查询与统计--转载
原文地址:http://shiyanjun.cn/archives/78.html Cloudera公司已经推出了基于Hadoop平台的查询统计分析工具Impala,只要熟悉SQL,就可以熟练地使用I ...
- 利用solr实现商品的搜索功能
后期补充: 为什么要用solr服务,为什么要用luncence? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据 ...
- 利用SOLR搭建企业搜索平台 之——配置文件
运行solr是个很简单的事,如何让solr高效运行你的项目,这个就不容易了.要考虑的因素太多.这里很重要一个就是对solr的配置要了解.懂得配置文件每个配置项的含义,这样操作起来就会如鱼得水! 在so ...
- [转] 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能
首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...
- 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能
首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...
- 利用SOLR搭建企业搜索平台 之——Solr索引基本操作
来源:http://blog.csdn.net/zx13525079024/article/details/25367239 我们来看下通过界面来操作SOLR,包括SOLR索引的添加,查询等基本操作. ...
- 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml
来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ...
- 利用SOLR搭建企业搜索平台 之——MultiCore
Solr Multicore 是 solr 1.3 的新特性.其目是一个solr实例,可以有多个搜索应用. 下面着手来将solr给出的一个example跑出来.这篇文章是基于<利用SOLR搭建企 ...
- Solr.NET快速入门(四)【相似查询,拼写检查】
相似查询 此功能会返回原始查询结果中返回的每个文档的类似文档列表. 参数通过QueryOptions的MoreLikeThis属性定义. 示例:搜索"apache",为结果中的每个 ...
随机推荐
- [转]RPC 框架通俗介绍
关于RPC 你的题目是RPC(远程过程调用,Remote Procedure Call)框架,首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服 ...
- webpack 4 知识点
相应Github地址:https://github.com/cag2050/webpack4_demo css-loader 让我们能在javascript代码中导入css文件,但这还不能让css起作 ...
- python连接Mongo数据库
python连接Mongo数据库主要采用pymongo连接,一般情况分为两种连接方式,一种通过指定端口和地址直接连接,另一种通过uri的格式连接 1.通过指定端口和地址连接Mongo conn = M ...
- Hibernate更新删除数据后,再查询数据依然存在的解决办法
删除数据后,重新查询了数据库,DB中记录已经删除了,但是数据依然能查询到,网上都说是Hibernate的缓冲问题. 我对session进行了clear,flush,并且在事务和查询中都对session ...
- JDK官网下载教程
进入官网网址 https://www.oracle.com/index.html 登录成功后,即可进行下载! PS:新版谷歌浏览器可能会出现无法下载的问题,使用IE浏览器即可.
- Spring Cloud Eureka 服务治理
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...
- mysql 备份与还原恢复
一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...
- JAVA常量与变量
顺着箭头的转换为自动转换逆这箭头的转换为强制转换. 常量 关键字FINAL 命名为大写 标识符 1要以字母数字下划线和¥组成 2首字母不能为数字 3不能是JAVA的关键字和 保留字 4数据类型分为基本 ...
- js的命名空间 && 单体模式 && 变量深拷贝和浅拷贝 && 页面弹窗设计
说在前面:这是我近期开发或者看书遇到的一些点,觉得还是蛮重要的. 一.为你的 JavaScript 对象提供命名空间 <!DOCTYPE html> <html> <he ...
- JAVA开源B2C系统
前言 最近有人想面向境外销售商品,但是又不想依托于亚马逊这些平台,于是找我来帮忙想弄个B2C系统.因为刚开始只是打算试试水,也就不打算投入多少成本了.所以这边就考虑使用开源的B2C系统来直接使用了. ...