2014年10月27日 星期一

Solr_999_注意事項


  • 當資料庫欄位型態為 TINYINT(1)  時可能發生的問題
    由於MySQL資料庫對於此型態欄位優先定位為為儲存 boolean值使用,所以Field 的 FieldType 對於此欄位僅能設定為boolean type 或 string type,但是在某些情況之下為了節省資料庫儲存空間,也會使用此欄位儲存超過0及1的值,但是Field type 卻無法使用 int type 進行解析,如果要解決此問題必需在db-data-config.xml裡面加入 
    tinyInt1isBit="false" 
    強制關制solr將TINYINT(1)  解析為boolean值,修改後該對應的field type 就可以使用 int type
    <dataConfig>
        <dataSource type="JdbcDataSource" 
                    driver="com.mysql.jdbc.Driver" 
                    url="jdbc:mysql://localhost:3306/fusion" 
                    user="root" password="root"
                    tinyInt1isBit="false" />
        <document>
            <entity name="table" query="select * from xxxtable"
                    deltaQuery="select Updated from xxxtablewhere Updated > '${dataimporter.last_index_time}'">
                <field column="sid" name="sid"/>
                <field column="TinyintType" name="tinyintType"/> <!-- 假設此欄位是存放TINYINT(1) -->                 
            </entity>       
        </document>
    </dataConfig>


  • UTC世界協調時間
    由於Solr所建立的索引全都是採用UTC世界協調時間為主,所以當使用程式進行索引建立時,無需刻意轉換UTC的資料格式,但是當要使用日期格式建立查詢語句,必需使用UTC格式進行查詢
    import org.joda.time.DateTime;
    import org.joda.time.DateTimeZone;
     
    ....   
    public void someMethod(){ 
     DateTime now  = new DateTime(new Date());
     DateTime zulu = now.toDateTime(DateTimeZone.UTC);
     System.out.println(zulu)
    }
    假設台灣時間為 2014-10-06 08:00:00
    結果輸出UTC時間及格式為: 2014-10-06T00:00:00.000Z
    另外由於建立的索引都是以UTC時間為主,所以在Solr主控台中所看到的時間都會比台灣時間慢8個小時,當然在主控台下查詢語句時,記得要減8個小時。



沒有留言:

張貼留言