Solr本地环境
1、首先从apache下载最新的solr包,我这里下载到的是4.9的solr包,解压出来以后,把目录下的example文件夹下面所有的文件拷贝到c盘solr目录内,作为solr的运行目录。
2、在该目录内新建一个bat文件,内容如下:
set TITLE=solr
java -Dsolr.solr.home=C:/solrhome -jar start.jar
这个bat文件就可以直接用jetty启动solr
3、本地的数据库表是tf_question主键为QID
配置自动增量更新(删除)索引
1、在C:\solr\solr-webapp\webapp\WEB-INF目录修改web.xml文件,增加一个监听
<listener>
<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
</listener>
2、将必须的jar包拷贝到C:\solr\solr-webapp\webapp\WEB-INF\lib目录
所需jar包是:MySQL jdbc驱动包(我用的mysql)
solr-dataimporthandler-4.9.0.jar、solr-dataimporthandler-extras-4.9.0.jar (这两个jar在solr官方的包里面有)
solr-dataimportscheduler-1.1.jar(这个是下载别人修改过的,来源是https://code.google.com/p/solr-data-import-scheduler/)
3、编辑C:\solrhome\jyask\conf目录下的schema.xml文件,增加数据库表对应字段映射和主键映射
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="_root_" type="string" indexed="true" stored="false"/>
<field name="QID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="TITLE" type="text" indexed="true" stored="true" multiValued="false"/>
<field name="CONTENT" type="text" indexed="true" stored="true" multiValued="false"/>
<field name="CREATETIME" type="tdate" indexed="true" stored="true" multiValued="false"/>
<field name="SORT_ORDER" type="int" indexed="true" stored="true" multiValued="false"/>
<field name="ISPUBLIC" type="int" indexed="true" stored="true" multiValued="false"/>
<field name="HIDENAME" type="int" indexed="true" stored="true" multiValued="false"/>
<field name="QTYPE" type="int" indexed="true" stored="true" multiValued="false"/>
<field name="QSTATUS" type="int" indexed="true" stored="true" multiValued="false"/>
<field name="QUSERID" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="QUSERNAME" type="string" indexed="true" stored="true" multiValued="false"/>
<uniqueKey>QID</uniqueKey>
4、在C:\solrhome\jyask\conf 目录下的solrconfig.xml里配置Handler:(jyask就是我的solr的core)
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">jyask-data-config.xml</str>
</lst>
</requestHandler>
5、在该目录里面新增一个jyask-data-config.xml文件,配置sql逻辑和映射field。
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.16:3306/edpublic?useUnicode=true&characterEncoding=utf-8" user="root" password="xtroot1121" batchSize="-1" />
<document>
<entity name="jyselect" pk="QID" query="SELECT QID,TITLE,CONTENT,QUSERID,QUSERNAME,CREATETIME,QSTATUS,SORT_ORDER,HIDENAME,ISPUBLIC,QTYPE FROM tf_question" deltaQuery="select QID,TITLE,CONTENT,QUSERID,QUSERNAME,CREATETIME,QSTATUS,SORT_ORDER,HIDENAME,ISPUBLIC,QTYPE from tf_question where CURRENTTIME > '${dataimporter.last_index_time}'" deltaImportQuery="SELECT QID,TITLE,CONTENT,QUSERID,QUSERNAME,CREATETIME,QSTATUS,SORT_ORDER,HIDENAME,ISPUBLIC,QTYPE FROM tf_question where QID= '${dataimporter.delta.QID}'" deletedPkQuery="select QID from tf_question where QSTATUS=0">
<field column="QID" name="QID"/>
<field column="TITLE" name="TITLE"/>
<field column="CONTENT" name="CONTENT"/>
<field column="QUSERID" name="QUSERID"/>
<field column="QUSERNAME" name="QUSERNAME"/>
<field column="CREATETIME" name="CREATETIME"/>
<field column="QSTATUS" name="QSTATUS"/>
<field column="SORT_ORDER" name="SORT_ORDER" />
<field column="HIDENAME" name="HIDENAME"/>
<field column="ISPUBLIC" name="ISPUBLIC"/>
<field column="QTYPE" name="QTYPE"/>
</entity>
</document>
</dataConfig>
PK为表的主键,这个要跟schema.xml里面的主键映射相同(<uniqueKey>QID</uniqueKey>)
如果里面的字段名和schema.xml配置的field的字段名是一样的,这里就不需要配置field,我这里还是加上了。
pk一定要有、deltaQuery和deltaImportQuery是增量更新必须要有的、deletedPkQuery是删除用的,比如说不需要索引那些删除标志是true的,就可以加上这个,如果在DIH的时候不需要删除,就把deletedPkQuery去掉。
如果字段有oracle的clob类型的话,entity要加上一个属性:transformer="ClobTransformer",并且字段field要加上一个属性clob="true"。比如说:<field column="CONTENT" name="CONTENT" clob="true"/>,其中CLBO字段的column必须大写!
6、在C:\solrhome新建一个conf文件夹,放入dataimport.properties文件:
#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# to sync or not to sync
# 1 - active; anything else - inactive
syncEnabled=1
# which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment需要导入的core,多个以,隔开
syncCores=jyask
# solr server name or IP address
# [defaults to localhost if empty]
server=localhost
# solr server port
# [defaults to 80 if empty]
port=8983
# application name/context
# [defaults to current ServletContextListener's context (app) name]
webapp=solr
# URL params [mandatory]
# remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
interval=1
# 重做索引的时间间隔,单位分钟,默认7200,即1天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
# 重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00
全部配置完成,以上。
另:solr的http命令:
全部导入,清除所有之前内容:http://localhost:8983/solr/jyask/dataimport?command=full-import&clean=true&commit=true
增量导入,不删除之前内容:http://localhost:8983/solr/jyask/dataimport?command=delta-import&clean=false&commit=true
查看导入的状态(结果):http://localhost:8983/solr/jyask/dataimport?command=status
参考链接:http://www.solr.cc/blog/?page_id=1365