Solr7.1搭建与整合

-版本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.xmljetty-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

 完成后,数据就可以自动更新数据库数据了。

基本的配置就是这样了,如果有不对的地方请指教!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值