这里,solr采用tomcat运行,对于solr6+,需要tomcat8+&jdk8+
1.下载需要的软件
Solr6.1.0、jdk1.8.0_102、apache-tomcat-8.5.5
2.配置Tomcat运行的jdk
编辑tomcat的启动脚本bin/startup.bat
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_102
3.配置部署文件solr.xml
编辑tomcat目录下的文件(没有就新建):conf\Catalina\localhost\solr.xml
<Context path="/solr" docBase="D:\develop\solr\webapp6.1.0" reloadable="false" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="D:\develop\solr\home" override="true"/>
</Context>
其中:
- path:项目访问路径,如http://localhost/solr/
- docBase:solr的web工程路径
- Environment:solr/home变量指定solr的目录
- 如果不这么做就需要修改solr项目的web.xml文件,启用其中的env-entry配置,显然这种方式对solr修改更少、更佳
4.配置solr/home目录
根据前面的配置新建需要的solr/home目录,如上的D:\develop\solr\home目录
复制solr-6.1.0\server\solr下的所有文件到D:\develop\solr\home中
5.验证
至此,solr的环境基本搭建完成,启动tomcat,输入url验证:
http://localhost:8080/solr/index.html
6.异常篇
1)缺少metrics-*相关jar包
19-Apr-2017 17:08:43.718 严重 [localhost-startStop-2] org.apache.catalina.core.StandardContext.filterStart Exception starting filter SolrRequestFilter java.lang.NoClassDefFoundError: com/codahale/metrics/MetricSet at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) at java.lang.Class.getConstructor0(Class.java:3075) at java.lang.Class.newInstance(Class.java:412) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4572) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5215) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:596) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1805) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: com.codahale.metrics.MetricSet at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) ... 20 more可以从solr源码目录中的server/lib/下复制相关的 metrics-*包到web的lib目录中
2)缺少日志相关的jar包
19-Apr-2017 17:22:03.890 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter SolrRequestFilter java.lang.NoClassDefFoundError: Failed to initialize Apache Solr: Could not find necessary SLF4j logging jars. If using Jetty, the SLF4j logging jars need to go in the jetty lib/ext directory. For other containers, the corresponding directory should be used. For more information, see: http://wiki.apache.org/solr/SolrLogging at org.apache.solr.servlet.CheckLoggingConfiguration.check(CheckLoggingConfiguration.java:27) at org.apache.solr.servlet.BaseSolrFilter.<clinit>(BaseSolrFilter.java:30) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4572) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5215) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:596) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1805) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
可以从solr源码目录中的server/lib/ext下复制日志相关的jar包到web的lib目录中
3)访问拒绝403
HTTP Status 403 - Access to the requested resource has been denied
注释掉web.xml中<security-constraint>元素这一段(限制了对solr资源的访问,注释掉就可以访问了)。