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小时这样就可以了。
我们查看效果。
为了对比 将数据的名称加备注+8solr查询页面
--------------------------------------------------------------------
到此,本章节的内容讲述完毕。
示例下载
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安 ...
随机推荐
- CDbConnection failed to open the DB connection: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
连接mysql出错:CDbConnection failed to open the DB connection: SQLSTATE[28000] [1045] Access denied for u ...
- 《算法导论》Problem 2-4 Inversions
在Merge Sort的基础上改改就好了. public class Inversions { public static int inversions(int [] A,int p, int r) ...
- iOS纯代码工程手动快速适配
首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述:第二种方法是和之前iPhone5的类似,比较简单,为iPho ...
- C++通过Callback向C#传递数据,注意问题
转载:出处 现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得. 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题. 从 ...
- TcpView 查看端口的小工具(推荐)
介绍: TCPView是一个Windows程序,将显示你的详细清单的所有TCP和UDP端点在您的系统,包括拥有进程名称,远程地址和状态的TCP连接. 打开下面的链接就可以下载了. https://te ...
- 前端轻量级web进度条 – Nprogress & nanobar
转载:http://www.xuanfengge.com/front-end-nprogress-and-lightweight-web-progress-bar-nanobar.html 前言 进度 ...
- Nodejs之模板ejs
ejs使用说明及介绍. 1.创建ejs项目 express -e test //创建模板为ejs的项目,默认为jade. 2.使用 app.js中添加 var ejs = require('ejs' ...
- 5.IP选路,动态选路
1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统 ...
- java的WindowBuilder可视化插件
一直做在安卓用xml作界面,对于java的控件不熟悉,也不习惯用代码做UI尤其是布局. 找了一下发现可以安装windowbuilder来实现java的可视化编程,但是很多资料里的连接都失效了. 刚自己 ...
- 浅谈Android的Activity运行流程(生命周期)
关于Android的Activity运行流程,我们可以写一些程序来直观的查看Activity的运行流程.在这里我们使用Log工具来获取Activity运行日志.假如我们新建一个Android项目,Pr ...