Solr服务器配置

原创 · 金汉江 · 2018-01-08

一 设置服务器时区

启动服务前如果有配置服务器时区,可以在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目录下

  1. 数据库导入
    solr/dist/目录下的solr-dataimport*

  2. 定时追加重建索引
    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&amp;clean=false&amp;commit=true&amp;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

#  
# 这个文件定义用户名,密码和角色
#  
# 格式如下  
#  &lt;username&gt;: &lt;password&gt;[,&lt;rolename&gt; ...]  
#  
#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"