本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。html
文章是哥(mephisto)寫的,SourceLinkjava
在cdh集成的solr cloud中,咱們能夠經過solr管理界面進行查詢,也能夠經過java的api進行查詢,但查詢過程當中,若是是時間類型的,可能會存在二者在界面上看上去不一致的問題,二者時間恰好相差本地的時區。git
一:上傳配置文件
爲了模擬現象,咱們設置以下solr文檔結構github
solrctl instancedir --create date_demo /data/solr_s二:建立collection
solrctl collection --create date_demo -s 2 -m 2 -r 2建立完後solr的collection以下apache
一:編寫程序
編寫模擬插入程序。爲了容易查看,只插入2條數據。api
這裏咱們使用的solr版本爲4.10.3。dom
View Codeprivate 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條數據。ide
三:程序查詢
在程序查詢的結果以下。工具
能夠看到solr本身的查詢界面使用的時間格式是UTC的,會有時差,咱們這裏是8小時。
CREATEDAY和CREATEDATE有時候不一致。oop四:處理
因此爲了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