-版本solr-7.1.0(适用8+)
-环境 Windows(Linux) jdk1.8
-框架 SSM
-启动方式:部署在apache-tomcat-8.5.23,以下简称Tomcat
1. 将solr-7.1.0\server\solr-webapp下的webapp复制到Tomcat\webapps下,并改名solr;
2. 将solr-7.1.0\server\lib下的ext下的所有jar包复制到Tomcat\webapps\solr\WEB-INF\lib下,以及
solr-7.1.0\server\lib下以metrics开头的jar、gmetric4j-1.0.7.jar复制到Tomcat\webapps\solr\WEB-INF\lib下;
3. 在Tomcat\webapps\solr\WEB-INF下创建classes文件夹,并把solr-7.1.0\server\resources下的log4.perportiy复制到 classes文件下;(8+版本没有log4文件,其中是三个文件复制log4j2.xml与jetty-logging.properties这两个放到classes中)
4. 修改修改Tomcat\bin下的catalina.bat,增加solr.log.dir系统变量,指定solr日志记录存放地址。
if not "%JSSE_OPTS%" == "" goto gotJsseOpts
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%" --增加下一行
set "JAVA_OPTS=%JAVA_OPTS% -Dsolr.log.dir=D:\Solr-7\solr_home\logs"
5. 在任意地方创建文件夹solr_home,把solr-7.1.0\server下solr下的所有文件复制到这个solr_home下,在这里,我创建在Solr-7.1.0的同级目录下了,并且修改配置文件Tomcat\webapps\solr\WEB-INF\web.xml,将下面配置的注释放开(如没有则新增),黑体部分更改为你的solr-home地址。
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:\Solr-7\solr_home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
并注释下面部分:
<!-- Get rid of error message
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>
-->
6. 配合solr日志记录存放地址,在solr-home下新建logs文件夹,此处与配置4位置配置路径一致;
7. 拷贝solr-7.1.0下contrib和dist文件夹至solr-home目录下。
8. 在solr-home目录下新建new_core文件夹;并拷贝solr-7.1.0\server\solr\configsets\_default\目录下conf文件夹至solr-home\new_core下。
9. 修改solr-home\new_core\conf\solrconfig.xml文件,如下
<!--
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
-->
<lib dir="${solr.install.dir:../}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-velocity-\d.*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="ojdbc\d.*\.jar" />
<lib dir="${solr.install.dir:../}/dist/" regex="solr-dataimporthandler\d.*\.jar" />
<!-- 这个配置是为下面配置自动增量全量导入的配置-->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
10. 启动Tomcat,访问http://localhost:8080/solr/index.html
11. 配置Ik分词器,首先导入ik的jar ik-analyzer-solr5-5.x 和 solr-analyzer-ik-5.1.0 两个jar包
导入Tomcat\webapps\solr\WEB-INF\lib下
然后配置solr_home\new_core\conf下的managed-schema文件加入
<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index"> --此处为创建索引分词
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query"> -- 此处为查询分词索引
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="查询字段" type="text_ik" indexed="true" stored="true"/>
<field name="productName" type="text_ik" indexed="true" stored="true"/>
到此IK分词设置完成。
12. Solr与Spring整合
创建spring-context-solr.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"
default-lazy-init="true">
<!--定义solr的server-->
<bean id="httpSolrClient" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
<constructor-arg value="http://location/solr/new_core"/>
</bean>
</beans>
13. 创建测试类SorlJTest
@ContextConfiguration(locations = { "classpath*:/spring-context*.xml" })
public class SolrJTest extends AbstractTransactionalJUnit4SpringContextTests {
private static final Log log = LogFactory.getLog(SolrJTest.class);
@Autowired
private HttpSolrClient client;
@Test
public void test() throws IOException, SolrServerException {
SolrQuery solr = new SolrQuery();
solr.setQuery("productName:苹果");
QueryResponse queryResponse =client.query(solr);
//拿到数据集合,返回查询结果
List<SolrDocument> list =queryResponse.getResults();
System.out.println(list);
}
}
14.有关IK分词,粗细力度查询
上面11中
useSmart="false" 为智能分词 false 关闭状态 默认最细力度分词
useSmart="true" 为智能分词 true 开启状态 默认最粗力度分词
智能分词的开关,根据自身业务的需求来进行设置,此处设置粗粒度查询 匹配度最高在第一位
15. 配置文件-导入数据库数据
导入jar,不同的数据库需要导入不同的驱动包,比如数据库如果是mqsql的就必须在导入
mysql-connector-java-5.1.11-bin.jar,下面两个包也需要导入
solr-dataimporthandler-6.4.2.jar
solr-dataimporthandler-extras-6.4.2.jar
上面三个包放入Tomcat\webapps\solr\WEB-INF\lib下
在solr_home\new_core\conf下新建data-config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource
type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.00.000:1521:XXXX"
user="XXXXXX"
password="XXXXXXX"/>
<document>
<entity name="可随意" pk="查询表id"
query="select
NMSKY,
NMSKY,
USER_ID,
USERNAM,
USERRAT
from 表"
deltaQuery="select 表id from 表 where 数据的创建时间 > 最后创建索引时间'${dih.last_index_time}'"
deltaImportQuery="select NMSKY,NMSKY,USER_ID,USERNAM,USERRAT from 表 where 表id='${dih.delta.表id}'">
</entity>
</document>
</dataConfig>
这里的entity与上面配置文件里的entity name ="可随意" 对应 全量full-import与delta-import增量更新可自行选择更新数据
16. 配置文件-自动更新数据库数据
在Tomcat\webapps\solr\WEB-INF\lib下 加入apache-solr-dataimportscheduler-1.4.jar这个jar包
在Tomcat\webapps\solr\WEB-INF\下 web.xml中第一个servlet标签前添加入
<listener>
<listener-class>
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
</listener-class>
</listener>
在solr_home下创建conf文件夹,路径是solr_home\conf,看好不是solr_home\new_core\conf
创建一个配置文件dataimport.properties,创建完成后加入以下配置(这个文件其实是apache-solr-dataimportscheduler-1.4.jar中的),其实solr_home\new_core\conf下也有一个dataimport.properties的,不过这个是保存增量与全量更新时间的
#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# tosync or not to sync
# 1- active; anything else - inactive
# 这里的配置不用修改
syncEnabled=1
# which cores to schedule
# ina multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
# 修改成你所使用的core,我这里是我自定义的core:simple
syncCores=solr_db_scheduler
# solr server name or IP address
# [defaults to localhost if empty]
这个一般都是localhost不会变
server=localhost
# solr server port
# [defaults to 80 if empty]
# 安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port=8983
# application name/context
# [defaults to current ServletContextListener's context (app) name]
# 这里默认不改
webapp=solr
# URL params [mandatory]
# remainder of URL
# 这里改成下面的形式,solr同步数据时请求的链接
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,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
# 重做索引的参数
reBuildIndexParams=/select?qt=/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
完成后,数据就可以自动更新数据库数据了。
基本的配置就是这样了,如果有不对的地方请指教!