solr與.net系列課程(八)solr中重跑索引的注意事項


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,

圖形界面操作方式:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM