• solr中重跑索引


    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,

    图形界面操作方式:

     
     
    标签: .net solr
  • 相关阅读:
    图解表连接
    python 开发学习
    学习路线
    前端开发学习路径(完整版)
    JSON.parse()与JSON.stringify()的区别
    npm介绍和使用
    jQ
    BOM
    javaScript 内置对象-Array数组
    Ajax
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4096254.html
Copyright © 2020-2023  润新知