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,

图形界面操作方式:

posted @ 2014-11-13 11:07  一枚信蜂  阅读(1801)  评论(4编辑  收藏  举报