Solr服务器配置
一 设置服务器时区
启动服务前如果有配置服务器时区,可以在bin/solr.in.sh中定义,例如:SOLR_TIMEZONE=”Asia/Shanghai”
二 创建索引
例:youtube_videos索引
1 创建索引项目
在solr/server/solr/configsets目录下
cp -rf data_driven_schema_configs youtube_videos
备注:如果数据库主键不是id是其他字段例如pid,执行3操作
2 修改主键
进入solr/server/solr/configsets/youtube_videos/conf目录下,编辑managed-schema替换主键字段
定位到:120行,修改id为pid
定位到:189行,修改id为pid
3 配置文件中添加数据库连接配置
修改solr/server/solr/configsets/youtube_videos/conf目录下,编辑solrconfig.xml
定位到:85行,在下面添加以下内容(注mysql-connector-java-5.1.35.jar需自行下截,放到solr/dist/目录下)
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-5.1.35.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
定位到:753行,在<requestHandler name="/select" class="solr.SearchHandler">上面添加以下内容
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
4 编辑数据库链接文件
在solr/server/solr/configsets/youtube_videos/conf目录下,创建data-config.xml文件
了解更多:http://wiki.apache.org/solr/DataImportHandler
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="数据源名称" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mamall_youtube?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true" user="mamall" password="mamall123" batchSize="-1" />
<document>
<entity name="[表名]" pk="id" dataSource="数据源名称"
query="select * from [表名]"
deltaQuery="select id from [表名] where timeLastUpdate > unix_timestamp('${dataimporter.last_index_time}')"
deletedPkQuery="select id from [表名] where isDelete=1"
deltaImportQuery="select * from [表名] where id='${dih.delta.id}'">
</entity>
</document>
</dataConfig>
5 网站配置站点
访问:xx.xx.xx.xx:8983/solr, 在Core Admin点击Add Core
| 字段 | 值 |
|---|---|
| name | youtube_videos |
| instanceDir | configsets/youtube_videos |
| dataDir | data_youtube_videos |
| config | solrconfig.xml |
| schema | managed-schema |
6 添加索引字段
访问:xx.xx.xx.xx:8983/solr, 选中youtube_videos在Schema点击Add Field
添加要索引的字段,注:数据库字段类型为tinyint(1),此处会添加不成功,Java好像认为是boolean类型(true,false),建议修改为tinyint(3)
无符号整型long,整型int,字符串类型string,价格double
7 导入数据到索引
访问:xx.xx.xx.xx:8983/solr, 选中youtube_videos在Dataimport选中full-import点击Execute
8 查询索引数据
访问:xx.xx.xx.xx:8983/solr, 选中youtube_videos在Query点击Execute Query查看索引结果
三 追加索引配置
1 导入必要jar包
拷贝jar文件到/solr/server/solr-webapp/webapp/WEB-INF/lib目录下
数据库导入
solr/dist/目录下的solr-dataimport*定时追加重建索引
solr-dataimportscheduler-1.1.jar官方文件
solr-dataimportscheduler-fix-1.0.jar修复版
2 创建定时间任务配置文件
在solr/server/solr目录下创建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
syncCores=youtube_videos,youtube_products,youtube_influencers
# solr server name or IP address
# [defaults to localhost if empty]
server=127.0.0.1
# 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&optimize=true
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
interval=1
# 重建全部索引的时间,单位:秒
reBuildIndexInterval=7200
# 重建全部索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true&optimize=true
# 重建索引的时间
reBuildIndexBeginTime=03:10:00
3 设置任务调度监听
修改/solr/server/solr-webapp/webapp/WEB-INF/web.xml
在77行<servlet>上面添加
<listener>
<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
</listener>
四 关闭solr日志
运行一段时间后会空间不足。查看后主要是日志文件占用过大
1 关闭gc日志
修改/solr/bin/solr.in.sh
注释29,30行
#GC_LOG_OPTS="-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails \
#-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime"
2 关闭log4j日志
修改/solr/resources/log4j.properties
第3行
log4j.rootLogger=INFO, file, CONSOLE
修改为
log4j.rootLogger=
3 修改日志级别
修改/solr/scripts/cloud-scripts/log4j.properties
第2行
log4j.rootLogger=INFO, stderr
修改为
log4j.rootLogger=
五 设置登录
1 添加权限组
修改:/solr/server/etc/realm.properties
#
# 这个文件定义用户名,密码和角色
#
# 格式如下
# <username>: <password>[,<rolename> ...]
#
#userName: password,role
root: 123456,admin
2 配置文件引入权限组
修改solr/server/contexts/solr-jetty-context.xml
...
<!-- 安全处理程序设置 -->
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">SolrLogin</Set> <!-- 一个名字-->
<!-- 引入刚刚新建的文件 -->
<Set name="config"><SystemProperty name="jetty.home" default="."/> /etc/realm.properties</Set>
</New>
</Set>
</Get>
</Configure>
3 过滤请求
修改solr/server/solr-webapp/webapp/WEB-INF/web.xml
...
<security-constraint>
<web-resource-collection>
<web-resource-name>solr</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>SolrLogin</realm-name>
</login-config>
</web-app>
Docker快速配置
1 启动docker服务
docker run --name solr --net gateway --ip 172.18.0.6 -d \
-p 8983:8983 \
-v /data0/docker/project/solr/data:/opt/solr/server/solr/mycores \
-d solr:latest
2 以root权限登录
docker exec -it -uroot solr /bin/bash
3 修改目录权限
chown solr:solr /opt/solr/server/solr/mycores
安装vim
apt-get update
apt-get install vim-tiny
创建进入容器命令
# 创建gosolr文件
/usr/bin/gosolr
# 设置执行权限
chmod +x /usr/bin/gosolr
编辑gosolr文件
#!/bin/bash
docker exec -it solr sh -c "export COLUMNS=`tput cols`; export LINES=`tput lines`; exec bash"