1 日志设置
默认solr的日志级别为为info,在使用过程中会产生大量日志,特别是多核情况下,启动速度和响应速度也会被拖慢
日志级别的设置方法,一是在admin页中临时设置,略去不表
另外就是在java虚拟机启动的参数中设置,
对于weblogic,找到weblogic使用的jdk目录,
在jre/lib/logging.properties文件中加入一行
org.apache.solr.level=WARNNING
2 数据增量导入设置
使用dataimport handler进行数据导入时,使用的配置文件是core/conf/data-config.xml文件
对于进行增量导入,在浏览器中输入的url是
http://localhost:8080/solr/dataimport?command=delta-import
当然,对应的导入配置不可少
对于增量更新索引,一般使用的方法是在数据表中包含时间字段,
每次更新时只查找表中数据修改时间晚于上次导入时间的所有数据
在此处,表中含四列
ID
ADDR
REGION_CODE
CREATE_DATE
其中Create_date列的格式要为YYYY-MM-DD HH:mm:SS
示例如下:
<dataConfig> <dataSource name="mysolrdb" jndiName="jdbc/mysolrdb" type="JdbcDataSource" batch-size="1000" /> <document> <entity name="user" query="select ID,ADDR FROM F_ADDR WHERE REGION_CODE LIKE '11%'" deltaImportQuery="select ID,ADDR WHERE ID='${dataimporter.delta.ID}'" deltaQuery="SELECT ID FROM F_ADDR WHERE REGION_CODE LIKE '11%' and CREATE_DATE>'${dataimporter.last_index_time}'"> <field column="ID" name="ID" /> <field name="ADDR" column="ADDR" /> </entity> </document> </dataConfig>
当修改data-config.xml 文件配置后,浏览器中输入URL
http://localhost:8080/solr/dataimport?command=reload-config
可以进行重新加载配置文件
关于数据导入的更多功能,可进入 管理页面:
http://localhost:8080/solr/admin/dataimport.jsp?handler=/dataimport
3 集群索引复制
在搭建solr实际应用中,可能会启用多台服务器,
一台master节点,负责索引的更新,
多台slave节点,从master节点同步索引数据并向外提供搜索服务
在多核multicore情况下,对于master和slave节点的replication配置写起来比较麻烦
比如在我实际项目中,大概1500万条数据分了300多个core
一开始使用C#写了个工具直接修改solrconfig.xml文件
后来部署到redhat上,数据导入后,这时候再进行master和slave节点的切换,
以及master节点URL配置的修改就没那么简单了,幸好solrconfig.xml支持使用参数
在solrconfig.xml文件同目录下新建一个名为solrcore.properties的文本文件
修改solrconfig.xml文件的replication节,可以写成这样:
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
<str name="enable">${enable.master:false}</str>
<str name="replicateAfter">commit</str>
<str name="replicateAfter">startup</str>
<str name="confFiles">schema.xml,stopwords.txt</str>
</lst>
<lst name="slave">
<str name="enable">${enable.slave:false}</str>
<str name="masterUrl">http://${MASTER_CORE_URL}/${solr.core.name}/replication</str>
<str name="pollInterval">${POLL_TIME}</str>
</lst>
</requestHandler>
其中对应的参数解释如下:
enable.master 是否为master节点
enable.slave 是否为slave节点
MASTER_CORE_URL master节点的URL
POLL_TIME 同步频率
solr.core.name 当前core的名称
除了solr.core.name是solr提供的属性外,其他的均需要放置到solrcore.properties文件中
对于master节点,solrcore.properties文件内容如下:
enable.master=true
enable.slave=false
MASTER_CORE_URL=
POLL_TIME=00:05:00
enable.master=true
enable.slave=true
MASTER_CORE_URL=192.168.111.12:2222/solr
POLL_TIME=00:05:00
在linux下直接写一个批量复制的shell脚本就解决了,不用再逐个文件的修改solrconfig.xml了
比如,cores目录结构如下:
|-- cores
| |-- core1
| | `-- conf
| |-- core2
| | `-- conf
| |-- core3
| | `-- conf
| `-- core4
| `-- conf
|-- solrcore.properties
|-- copySolrcoreConfig.sh
则shell脚本文件copySolrcoreConfig.sh的内容如下:
#!/bin/sh
foreachdir(){
for file in $1/*
do
if [ -d $file ]
then
cp -rf $1/solrcore.properties $file/conf/
fi
done
}
if [ $# -gt 0 ]
then
foreachdir "$1"
else
foreachdir "."
fi