日期:2014-05-16  浏览次数:20420 次

Apache Solr 实践(二)数据库增量导入

之前将Solr的基础环境搭建了起来。今天配置一下数据库的增量导入。实现步骤wiki上面写的已经很清楚,主要注意两点,一是索引的中文分词,二是自定义字段。solr自带的schema.xml中已经配置了常用字段,遇不包含字段需要定义。依wiki,实现solr索引定时增量导入大致需五步。

第一步,配置requesthandler于solrconfig.xml内容如下

? <requestHandler name="/dataimport" 
??    class="org.apache.solr.handler.dataimport.DataImportHandler">
??    <lst name="defaults">
???     <str name="config">./data-config.xml</str>
??    </lst>
? </requestHandler>

用到的jar包solr-dataimporthandler-4.3.0.jar位于solr-4.3.0\dist,需要拷贝到tomcat/webapps/lib下。

第二步,编写data-config.xml和dataimport.properties。solr发布包中随带了一个demo位于solr-4.3.0\example\example-DIH\solr\db\conf直接拿来稍作修改

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" 
		url="jdbc:mysql://localhost:3306/solr_import" user="root" password="admin"/>
    <document>
        <entity name="item" query="select * from item"
                deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">
            <field column="ID" name="id" />
            <field column="NAME" name="name" />
            <field column="MANU" name="manu" />
            <field column="WEIGHT" name="weight" />
            <field column="PRICE" name="price" />
            <field column="POPULARITY" name="popularity" />
            <field column="INSTOCK" name="inStock" />
            <field column="INCLUDES" name="includes" />

            <entity name="feature"  
                    query="select DESCRIPTION from FEATURE where ITEM_ID='${item.ID}'"
                    deltaQuery="select ITEM_ID from FEATURE 
						where last_modified > '${dataimporter.last_index_time}'"
                    parentDeltaQuery="select ID from item where ID=${feature.ITEM_ID}">
                <field name="features" column="DESCRIPTION" />
            </entity>
            
            <entity name="item_category"
                    query="select CATEGORY_ID from item_category where ITEM_ID='${item.ID}'"
                    deltaQuery="select ITEM_ID, CATEGORY_ID from 
						item_category where last_modified > '${dataimporter.last_index_time}'"
                    parentDeltaQuery="select ID from item where ID=${item_category.ITEM_ID}">
                <entity name="category"
                        query="select DESCRIPTION from category where ID = '${item_category.CATEGORY_ID}'"
                        deltaQuery="select ID from category where last_modified > '${dataimporter.last_index_time}'"
                        parentDeltaQuery="select ITEM_ID, CATEGORY_ID 
							from item_category where CATEGORY_ID=${category.ID}">
                    <field column="description" name="cat" />
                </entity>
            </entity>
        </entity>
    </document>
</dataConfig>

?

#Fri Jan 17 11:44:56 CST 2014
interval=1
port=80
server=localhost
params=/dataimport?command\=delta-import&clean\=false&commit\=true
webapp=solr
reBuildIndexInterval=2
dataimporter.last_index_time=1914-01-14 17\:40\:00
syncEnabled=1
last_index_time=2014-01-17 11\:44\:55
item.last_index_time=2014-01-17 11\:44\:55
reBuildIndexParams=/dataimport?command\=full-import&clean\=true&commit\=true
reBuildIndexBeginTime=03\:10\:00
syncCores=collection1

第三步,修改schema.xml支持中文分词。data-config.xml中filed引用schema.xml中的filedType,而schema.xml中name,manu等字段类行为text_general,需要改为之前配置的text_zh.

?

第四步建数据库,数据库脚本也都是现成的,位于solr-4.3.0\example\example-DIH\hsqldb\ex.script。demo是基于sqldb的,稍作修改即可用于mysql。将数据库驱动拷到lib。insert N笔数据(中文)作为测试。

?

第五步,建索引。依次打开solr控制台-——>dataimport,command首次选full-import,勾选commit,Entity选择item——>execute。

索引结果如何?在solr控制台左侧选择Query,q填写n