zoukankan      html  css  js  c++  java
  • 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,

    图形界面操作方式:

  • 相关阅读:
    pandas 数据类型研究(三)数据类型object与category
    kaggle比赛实践M5-baseline研读
    pd.melt详解--列转行
    kaggle比赛实践M5-数据集介绍
    kaggle比赛实践M5-比赛介绍
    txNLP 335-374
    信息,熵,联合熵,条件熵,互信息(信息增益),交叉熵,相对熵(KL散度)
    框架SpringMVC笔记系列 二 传值
    项目总结笔记系列 Social Hub KT Session1
    读书笔记系列之java性能优化权威指南 一 第一章
  • 原文地址:https://www.cnblogs.com/wenxinghaha/p/4094419.html
Copyright © 2011-2022 走看看