標籤:style blog http io color os 使用 sp for
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,
圖形介面操作方式:
solr與.net系列課程(八)solr中重跑索引的注意事項