在cdh集成的solr cloud中,我們可以通過solr管理界面進行查詢,也可以通過java的api進行查詢,但查詢過程中,如果是時間類型的,可能會存在兩者在界面上看上去不一致的問題,兩者時間剛好相差本地的時區。 ...
閱讀目錄
本文版權歸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 2 -m 2 -r 2創建完後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"); }View Code二:運行程式
可以看到我們已經插入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