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创建的最后 时间进行比较。
点击Execute可做全量导入。后面使用查询操作。