Hadoop技巧(04):简易处理solr date 时区问题
阅读目录
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
文章是哥(mephisto)写的,SourceLink
序
在cdh集成的solr cloud中,我们可以通过solr管理界面进行查询,也可以通过java的api进行查询,但查询过程中,如果是时间类型的,可能会存在两者在界面上看上去不一致的问题,两者时间刚好相差本地的时区。
创建collection
一:上传配置文件
为了模拟现象,我们设置如下solr文档结构
solrctl instancedir --create date_demo /data/solr_s二:创建collection
solrctl collection --create date_demo -s -m -r创建完后solr的collection如下
模拟程序
一:编写程序
编写模拟插入程序。为了容易查看,只插入2条数据。
这里我们使用的solr版本为4.10.3。
private void insert() throws SolrServerException, IOException,
ParseException {
String zhHost = "master1/solr"; CloudSolrServer cloudSolrServer = new CloudSolrServer(zhHost); cloudSolrServer.setDefaultCollection("date_demo"); String id_1 = UUID.randomUUID().toString().replaceAll("-", "")
.toUpperCase();
String name_1 = "1点前+8";
Date createDate_1 = sdfDate.parse("2016-12-30 00:11:12");
String day_1 = sdfDay.format(createDate_1); String id_2 = UUID.randomUUID().toString().replaceAll("-", "")
.toUpperCase();
String name_2 = "1点后+8";
Date createDate_2 = sdfDate.parse("2016-12-30 10:13:14");
String day_2 = sdfDay.format(createDate_2); SolrInputDocument solrInputDocument1 = create(id_1, name_1, day_1,
createDate_1);
SolrInputDocument solrInputDocument2 = create(id_2, name_2, day_2,
createDate_2); cloudSolrServer.add(solrInputDocument1);
cloudSolrServer.add(solrInputDocument2);
cloudSolrServer.commit(); System.out.println("success");
}二:运行程序
可以看到我们已经插入2条数据。
三:程序查询
在程序查询的结果如下。
可以看到solr自己的查询界面使用的时间格式是UTC的,会有时差,我们这里是8小时。
CREATEDAY和CREATEDATE有时候不一致。四:处理
所以为了3方的统一,要么自己改solr界面查询的。要么自己改下时差,使得3方结果一致,方便使用。
这里我们采用自己修改时差来同步。
但工具量挺大,得在solr插入的时候转换下时间格式程utc。还的在每次查询的时候转换回来。
所以这里就自己恶心下自己,改下solr源码,在源码中找到对应的位置,固定的修改成自己这里的时差。
这样就间接的使3方同步了。找到solr相关的处理代码类
org.apache.solr.common.util.JavaBinCodec.java在readVal下
return new Date(dis.readLong()-28800000l);//因为存储的时候solr的时间格式是utc的,所以这里减掉当前时区的值在writePrimitive下
daos.writeLong(((Date) val).getTime()+28800000l);//存入的时候为了同day string同步 加8小时这样就可以了。
我们查看效果。
为了对比 将数据的名称加备注+8
solr查询页面
--------------------------------------------------------------------
到此,本章节的内容讲述完毕。
示例下载
Github:https://github.com/sinodzh/HadoopExample/tree/master/2017/solr.demo/
系列索引
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
文章是哥(mephisto)写的,SourceLink
Hadoop技巧(04):简易处理solr date 时区问题的更多相关文章
- Hadoop技巧(02):时间同步
阅读目录 序 时间同步 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 在实际部署 ...
- Hadoop技巧系列索引
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink Hadoop技巧(01):插件,终端权限 Had ...
- Hadoop技巧(03):HostName命名带来的问题
阅读目录 序 HostName 问题 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink ...
- Hadoop技巧(01):插件,终端权限
阅读目录 序 HDFS权限 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 在ha ...
- Solr Date类型的哪些你不得不了解的细节
我们先来看看Solr日期类型的一些内幕,然后讨论一下Solr日期类型存在的一些问题,最后我们看看怎么解决现存的问题.概述 DateField 在Solr4.x之前,我们只有DateField,这类型现 ...
- Java中Date时区的转换
1.Date中保存的是什么? 在java中,只要我们执行 Date date = new Date(); 就可以得到当前时间.如: Date date = new Date(); System.ou ...
- solr 设置时区
问题 solr5.2: 发现打印log时间和真实时间对不上,服务器时间设置没有问题,后来发现,solr需要设置时区 解决方法: 直接修改bin/solr.in.sh 文件 #SOLR_TIMEZONE ...
- linux date时区修改
# vi /etc/sysconfig/clock ZONE=Asia/Shanghai(查/usr/share/zoneinfo下面的文件) [root@localhost ~]# dateFr ...
- 04 Apache Solr: 目录结构
通过前面的介绍,我们已经能够看到管理员界面并对Solr形成了一个感性的认识.本篇将在物理上深入了解Solr的安装目录结构和Solr示例的主目录结构. 安装目录结构 Solr 6.3.0安 ...
随机推荐
- CSS判断不同分辨率显示不同宽度布局CSS3技术支持IE6到IE8
CSS判断不同分辨率浏览器(显示屏幕)显示不同宽度布局CSS3技术支持IE6到IE8.将用到css3 @media样式进行判断,但IE9以下版本不支持CSS3技术,这里DIVCSS5给大家介绍通过JS ...
- DateFormat 竟然是非线程安全的?!!!!!
今天撸代码忽然发现一个奇怪的一场抛出,经过一番排查发现有可能DateFormat 的多线程问题造成的,网上一查DateFormat竟然非线程安全.那我原先的代码...(细思极恐)
- Struts2命令空间小结
sturts2命名空间小结,以tomcat为服务器 1. 命名空间配置为“/” <package name="default" namespace="/" ...
- div垂直居中(js)
window.onload = function(){ var xx = document.documentElement.clientHeight; // 470为要垂直居中的div的高度 he = ...
- iOS 之 支付
现在广泛应用的是微信支付和支付宝支付,这两种应该覆盖了几乎所有网上消费的用户,所以我们就用这两种支付方式就够了.2014年用过支付宝的网民购物占比有94%. 1. iOS 之 微信支付 2. iOS ...
- 我对CSS中的BFC的理解
1.什么是BFC 其实在老师让我们写这篇叫BFC的时候,我跟本不知道有什么BFC的东西. 后来,我找了一些资料,知道了,BFC是Block Formatting Context (块级格式化上下 ...
- 除trigger()方法外的jquery手动触发事件
trigger()可以触发指定事件是大家基本都知道的了. 除了trigger()之外我们也可以这样来触发: html <div id="box" style="he ...
- div+CSS实现段落首行缩进两个字符
段落前面空两个字的距离,不要再使用空格了,用CSS实现段落首缩进两个字符.应该使用首行缩进text-indent.text-indent可以使得容器内首行缩进一定单位.比如中文段落一般每段前空两个汉字 ...
- andorid 开放工具集合
1.开放工具集合 http://www.androiddevtools.cn/
- AngularJS中$http服务的简单用法
我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对 ...





