Solr之DIH配置(数据导入)

时间:2022-08-17 07:58:28
Solr之DIH配置(数据导入)
solr4.7配置(DIH  数据库数据导入配置)      首先,在看数据导入配置之前,我们先看几个目录。              1.在每个core对应的文件夹下面有一个conf文件夹,这个文件夹是核心配置文件夹,今后的工作重心都在这个文件夹下面。其次,date文件夹是solr创建的索引等存放    的文件夹,一般不做修改。                2.shema.xml,核心配置文件。oracle-data-config.xml(我自己的是这个名字)DIH数据库连接配置文件。solrconfig.xml核心配置文件之一,相当于这个core的数据传输配置。         详细介绍:         oracle-data-config.xml:
<dataConfig>                                                                     

    <dataSource type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.0.124:1521:orcl" user="caqdh" password="caqdh"  />   
<!--  数据库连接,此处oracle为例 -->
    <document>
        
  <entity name="jiudian" query="select a.ID,  '2' as ATYPE,a.hotel_name as PARK_NAME,a.ADDR,a.PRICE,a.SUMMARY as SUMMARIZE,b.IMAGE_URL from    hotel_info a 
LEFT JOIN SYS_IMAGE_LIBRARY b ON a.title_img_id=b.id
where a.deleted=0 and hotel_type=0" pk="jiudian">                                       这段配置表示:将SQL查询的结果,映射存储到一个Document中,ID的值放在这个
            <field column="ID" name="orclid"/>                                      Document中的name属性值为:orclid的field中,PARK_NAME的值存放在这个Document中
            <field column="PARK_NAME" name="parkName"/>              name属性值为:parkName的field中。其他几个同理。而后面name的绿色属性是在schema.xml
            <field column="ATYPE" name="aType"/>                              中定义的。
            <field column="ADDR" name="addr"/>   
            <field column="PRICE" name="price"/>   
            <field column="SUMMARIZE" name="summarize"/>   
            <field column="IMAGE_URL" name="imageUrl"/>   
        </entity>
  </document>  
</dataConfig>

  注意此处:上面的SQL语句中标记为红色的部分,红色部分与SQL红色部分对应。在很多数据库中,字段名称大写小写都无所谓,都能识别,但是,在solr中,我建议SQL的字段名称统一大写,因为可能小写存在无法识别的问题(个人在使用中发现了存在问题)。

schema.xml

<?xml version="1.0" ?>

<schema name="example core one" version="1.1">
  <types>

   <fieldtype name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
   <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
  </types>

<fields>   
  <!-- general -->
  <field name="id"        type="string"    indexed="true"  stored="true"  multiValued="false" required="true"/>
  <field name="type"      type="string"    indexed="true"  stored="true"  multiValued="false" /> 
  <field name="name"      type="string"    indexed="true"  stored="true"  multiValued="false" /> 
  <field name="core1"     type="string"    indexed="true"  stored="true"  multiValued="false" />
  <field name="_version_" type="long"      indexed="true"  stored="true"/>
</fields>
  <!---
    type=" XXX "------->在solr中,会将数据处理后存储,在后面我会介绍一种中文分词存储,这种存储需要在types中配置,然后使用在fields里面使用。此处表示id这个
field(域的值)使用string这种类型处理。
   indexed="true"------>表示创建索引,false表示不创建
  stored="true"  ---------->表示存储实际值,如果存储则从这个field里面可以取真实的值,false,不存出,表示不能取到值。
  multiValued="false"---->表示这个域能否保存多个字段的值,false表示不能。   required="true"  ------->表示是否是必需值(能否存在空值),true表示是必须值(不能为空),false表示不是必需值能为空。 <field name="_version_" type="long"      indexed="true"  stored="true"/>------>版本,一般不修改。
  注意:此处红色的字相对应,fields里面的红色和types里面的红色相对应。绿色的name属性值和oracle-data-config.xml那个配置文件中的name相对应。
      (此处用的不是一套配置文件,所以具体值不相同)
   ->

<uniqueKey>id</uniqueKey>
<!-- 主键,不能重复值-->


<defaultSearchField>name</defaultSearchField>

<!--  默认检索域-->

<solrQueryParser defaultOperator="OR"/>

<!-- 默认的查询条件链接符为OR-->

</schema>

solrconfig.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!--- 此处的配置文件中红色为配置   蓝色为注释 。--->

<config>

  <luceneMatchVersion>4.7</luceneMatchVersion>

  <!--  控制solr依附的Lucene不同主组件的版本号 ,一般使用最新,因为BUG修复和新功能的增加。4.7是2014年3月初的样子所出版本-->

  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>

   <!--   directoryFactory 用来创建建立索引。solr.directoryFactory:solr.StandardDirectoryFactory是以文件系统为基础,并尝试为当前
             的JVM和平台选择最佳的实现。默认情况下,solr.NRTCachingDirectory封装了solr.StandardDirectoryFactory以及其更好的NRT性
            能而且在内存中缓 存小量文件。当然也可
以使用特殊的实现类,solr.MMapDDirectoryFactory , solr.NIOFSDirectoryFactory 
             solr.SimpleFSDirectoryFactory ,  solr.RAMDirectoryFactory是以内存为基础的,不能持久化以及对重复的" replication " 应用凑效。
    -->


  <dataDir>${solr.core1.data.dir:}</dataDir>

  <!--  指定solr所创建的index文件存放的位置,默认是当前solr.home 目录下面的data文件下(./data)-->

  <schemaFactory class="ClassicIndexSchemaFactory"/>
    <!--  -->

  <updateHandler class="solr.DirectUpdateHandler2">
    <updateLog>
      <str name="dir">${solr.core1.data.dir:}</str>
    </updateLog>
  </updateHandler>

   <!--  高性能的更新操作类,默认为solr.DirectUpdateHandler2,下面为日志存放的位置-->


  <requestHandler name="/get" class="solr.RealTimeGetHandler">
    <lst name="defaults">
      <str name="omitHeader">true</str>
    </lst>
  </requestHandler>

<!-- 实时获取处理器,不必要去提交或打开一个新的检索器,这样确保了返回任何文档存储的最新的域。当前实现依赖于能够被使用的updatelog特性 -->
  
  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" /> 

   
<!-- 能够使用简单的master/slave   开启懒加载->


  <requestDispatcher handleSelect="true" >
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" formdataUploadLimitInKB="2048" />
  </requestDispatcher>


  
  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />

  <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />

  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
    <lst name="invariants">
      <str name="q">solrpingquery</str>
    </lst>
    <lst name="defaults">
      <str name="echoParams">all</str>
    </lst>
  </requestHandler>

  <!-- config for the admin interface --> 
  <admin>
    <defaultQuery>solr</defaultQuery>
  </admin>

</config>

数据导入   数据导入分为:全量导入以及增量导入。全量导入即将<entity></entity>中配置的SQL执行一次,将数据库中符合条件的数据一次性导入,这种效率比较低。   另外一种是增量导入(示例中没有配置增量导入)。增量导入,也是将符合条件的SQL数据导入,一般利用时间字段。将数据创建的时间和solr中solr创建的最后 时间进行比较。Solr之DIH配置(数据导入)
点击Execute可做全量导入。后面使用查询操作。