solr與.net系列課程(八)solr中重跑索引的注意事項
我們如果在項目中使用solr,那肯定就是把數據庫中的數據跑進solr服務器中,solr有兩種操作一種是新建索引,一種是增量索引,這里我們來說一說新建索引的一下注意事項
終止跑索引 http://192.168.0.9:8080/solr/collection1/dataimport?command=abort
開始索引 http://192.168.0.9:8080/solr/collection1/dataimport?command=full-import
當我們第一次執行索引時,因為solr中沒有數據,所以一切都會是按照我們想象的結果發生,但當我們需要重新執行索引的時候,在用上面的鏈接執行,就會出現一個問題,執行時是solr中的所有數據都消失了,然后在一點點的增加,這樣肯定是不行的,因為當數據量很大是,執行一次索引要花費很長時間,這時用戶登錄你的系統就會發現你的數據不夠,會出問題的,只有執行全部完成時數據才會完整,導致這個原因是因為solr默認的所以機制是,先移除原有的所有數據(其實是轉移到另一個位置,當索引完成時在刪除,索引異常時會回滾),然后在一條條的往里面跑,但是我們可以選擇重跑索引時不移除數據,而是逐條覆蓋原有數據,這樣就不會影響用戶使用的,但是會增加索引的時間,
執行語句為 http://192.168.0.9:8080/solr/collection1/dataimport?command=full-import&clean=false
在圖形界面如下操作:
然后我們在來說一說多表索引的問題,當我們的數據是從多張表中獲取的,如下
<dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://192.168.0.9;DatabaseName=test" user="sa" password="123"/> <document name="Info"> <entity name=" test1 " transformer="ClobTransformer" pk="id" query="select id, name address,phone,class,addtime from tableA" deltaImportQuery=" select id, name address,phone,class,addtime from tableA" deltaQuery="SELECT id FROM tableA where adddate > '${dataimporter.last_index_time}'"> <field column="id" name="id" /> <field column="name" name="solrname" /> <field column="address " name=“address " /> <field column="phone " name="phone " /> <field column="class " name="class " /> <field column="addtime " name="addtime " /> </entity> <entity name=" test2 " transformer="ClobTransformer" pk="id" query="select id, name address,phone,class,addtime from tableB" deltaImportQuery=" select id, name address,phone,class,addtime from tableB" deltaQuery="SELECT id FROM tableB where adddate > '${dataimporter.last_index_time}'"> <field column="id" name="id" /> <field column="name" name="solrname" /> <field column="address " name=“address " /> <field column="phone " name="phone " /> <field column="class " name="class " /> <field column="addtime " name="addtime " /> </entity> </document> </dataConfig>
這個數據源就是從tableA與tableB中獲取數據,當然了,兩張表的id不能重復,否則后進來的會覆蓋先進入的數據,那么當我們只想重新索引其中一張表怎么辦,
http://192.168.0.9:8080/solr/collection1/dataimport?command=full-import,這個語句會重跑所有的數據(兩個table都會重跑),其實solr是可以根據entity的name單個索引的,其他表的數據不變
方法如下:
http://192.168.0.9:8080/solr/collection1/dataimport?entity=test1&command=full-import,當然也可以加上clean=false,
圖形界面操作方式: