Solr的使用

Solr简介:

基于Lucene的java搜索引擎服务器程序
输出多种格式(XML/XSLT和JSON等)建立索引,维护索引
数据检索(全文检索,高亮显示,精确搜索)

Solr下载

下载地址:
https://archive.apache.org/dist/lucene/solr/

solr依赖环境
JDK TOMCAT

Solr的服务器搭建

解压下载的solr的zip包,目录如下 :

在这里插入图片描述

将dist\solr-4.9.1.war文件复制到tomcat的webapps目录下,并将文件命名为solr.war :
在这里插入图片描述
在这里插入图片描述
复制 solr解压包下example\lib\ext 下所有的jar 到tomcat 的lib目录下 :
在这里插入图片描述
在计算机本地新建一个文件夹solr_home(当然你可以随便起名字), 然后复制
solr-4.9.1\example\solr 下的所有文件到 solr_home下 :
在这里插入图片描述
启动tomcat,待tomcat启动成功后,关闭tomcat。打开tomcat的webapps目录。注意,
此时solr的war包以及被解压成solr文件夹。删除tomcat 的webapps目录下的solr的war
包,保留solr文件夹。

修改配置文件 apache-tomcat-7.0.67\webapps\solr\WEB-INF\web.xml

<env-entry> 
<env-entry-name>solr/home</env-entry-name>  
<env-entry-value>E:\solr_home</env-entry-value> 
<env-entry-type>java.lang.String</env-entry-type> 
</env-entry> 

访问solr(http://localhost:端口号/solr/),如出现以下界面则solr部署成功。
在这里插入图片描述

新建数据配置 core

新建core(solr中把配置的每一个模块都叫core),在solr_home目录下,拷贝collection1文件夹,并起名为test。打开test文件夹,修改core.properties文件,将name修改为test
在这里插入图片描述在这里插入图片描述
重新启动tomcat,并访问solr,如出现以下界面,则表示新建test core成功。
在这里插入图片描述

新增数据库配置

到目前为止,我们已经完成了solr的基础配置,并且创建了test core,接下来我们需要把数
据的数据和搜索引擎连接起来,让搜索引擎可以读取数据库的数据。

  1. 拷贝数据库连接jar包(mysql-connector-java-5.1.18.jar)到tomcat的lib目录
  2. 以创建test core的方式新建hotel core
  3. 打开hotel的conf文件夹中的solrconfig.xml文件,在requestHandler name="/select"
    class=“solr.SearchHandler”>前面上加上一个dataimport的处理的Handler
<requestHandler name="/dataimport"  class="org.apache.solr.handler.dataimport.DataImportHandler"> 
<lst name="defaults"> 
         <str name="config">data-config.xml</str> 
</lst> 
</requestHandler> 

在hotel的的conf文件夹下并新建data-config.xml文件,配置如下

<?xml version="1.0" encoding="UTF-8"?> 
<dataConfig> 
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" 
url="jdbc:mysql://127.0.0.1:3306/newsdb" user="root" password="123456" /> 
<document name="hotel_doc"> 
<entity name="hotel" pk="id"  query="SELECT * FROM news_user"> 
<field column="id" name="id"/> 
<field column="userName" name="userName"/> 
<field column="passWord" name="passWord"/> 
</entity> 
</document> 
</dataConfig> 

打开hotel的conf目录下的schema.xml文件
(1)保留_version_ 这个field 如下:(删除其它所有field,dynamicField,copyField标签)
在这里插入图片描述
保留uniqueKey标签如下:
在这里插入图片描述

(2)添加索引字段:这里每个field的name要和data-config.xml里的entity的field的name一样,一一对应。
在这里插入图片描述

   <field name="_version_" type="long" indexed="true" stored="true"/>
    <field name="id" type="string" indexed="true" stored="false"/>
 <field name="userName" type="string" indexed="true" stored="false"/>
 <field name="passWord" type="string" indexed="true" stored="false"/>
 
 <uniqueKey>id</uniqueKey> 
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 

将导入数据的JAR包拷贝到webapps/solr/WEB-INF/lib的lib目录下
在这里插入图片描述
启动Tomcat,执行数据导入。

如果报错:
在这里插入图片描述
在这里插入图片描述
解决:
可能是把solr schema.xml的id设置成了int类型。本身并没有错,但solr启动会扫描cinf目录下的elevate.xml文件,这个文件中定义的id值是MA147LL/A,所以会出现SolrException异常: Invalid Number: MA147LL/A。
打开solr中conf的elevate.xml:
在这里插入图片描述
注解掉:

 <query text="ipod">
   <doc id="MA147LL/A" />  <!-- put the actual ipod at the top -->
   <doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
 </query>

在这里插入图片描述
成功显示的页面:
在这里插入图片描述
执行查询操作:
在这里插入图片描述

配置增量更新

配置solr的增量更新,即定时将数据库的数据导入到solr中。

apache-solr-dataimports-cheduler.jar包添加至solr的\solr\WEB-INF\lib目录下

注:apachesolrdataimportscheduler.jar的jar包是apache提供的用于增量更新的jar包,但
apache提供的原jar包中,代码有BUG。该bug在教学资料提供的jar包中已经被修复,具体可参
考提供的apachesolrdataimportscheduler的源码,在此不再赘述。

增加增量更新配置文件,在solr_home文件夹下新建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=test,hotel 
#  solr server name or IP address 
#  [defaults to localhost if empty] 
server=localhost 
#  solr server port 
#  [defaults to 80 if empty] 
port=8080 
#  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 
#  重做增量索引的时间间隔 
#  schedule interval 
#  number of minutes between two runs 
#  [defaults to 30 if empty] 
interval=1 
#  重做全量索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引 
#reBuildIndexInterval=7200 
#  重做索引的参数 
reBuildIndexParams=/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 

新增增量更新数据的监听器,在solr的web.xml中加入以下监听器

<listener>
	<listener-class>
		org.apache.solr.handler.dataimport.scheduler.ApplicationListener
	</listener-class>
</listener>

修改导入数据查询SQL
在这里插入图片描述
说明:deltaQuery是根据dataimport.properties配置文件中的更新时间,从数据库中查询出,修
改日期在最后一次更新日期之后的酒店数据,并记录其id,而deltaImportQuery的目的是将
deltaQuery查询出的数据导入到solr中

<?xml version="1.0" encoding="UTF-8"?> 
<dataConfig> 
 <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" 
 url="jdbc:mysql://127.0.0.1:3306/newsdb" user="root" password="123456" /> 
 
  <document name="news"> 
    <entity name="news_user" pk="id"  query="SELECT   id,userName,passWord  FROM news_user"
    
      deltaImportQuery="SELECT   id,userName,passWord  FROM news_user  where  id='${dih.delta.id}'"
      deltaQuery="SELECT id as id FROM news_user where  modifyDate > '${dih.last_index_time}'"> 
      	
      
      <field column="id" name="id"/> 
      <field column="userName" name="userName"/> 
      <field column="passWord" name="passWord"/> 
    </entity> 
  </document> 
</dataConfig> 

启动Tomcat进行测试 :
正常导入,还未修改在这里插入图片描述
数据库修改
原:
在这里插入图片描述
修改后:
在这里插入图片描述
1分钟后查询数据,确定数据是否更新 成功!!
在这里插入图片描述

配置分词器

分词器: 是从用户输入的一段文本中提取关键词,用于其它业务操作

常见的 JAVA 分词器:
word 分词器、
Ansj 分词器、
Stanford 分词器、
IKAnalyzer分词器

我们这里使用:IKAnalyzer 分词器 ,solr 如果是 3.x 版本的用 IKAnalyzer2012_u6.zip 如果是 4.x 版本的用 IK Analyzer 2012FF_hf1.zip,一定要对应上,要不然会配置失败。

IK 分词器下载地址: https://download.csdn.net/download/shangyishang/10803443
百度云网盘:链接: https://pan.baidu.com/s/1H742jeLLZQRh6tYoO-zkTw 提取码: mea3

首先,下载IKAnalyzer 。
将ik的所有jar文件 拷贝到 webapps\solr\WEB-INF\lib 目录下
在这里插入图片描述
在webapps\solr\WEB-INF\下新建classes文件夹,将\solr\WEB-INF\lib下的IKAnalyzer.cfg.xml和stopword.dic
文件拷贝到改文件夹下
在这里插入图片描述
在 solr_home\test\conf\schema.xml 增加如下配置:
对分词器类型进行配置

<fieldType name="text_ik" class="solr.TextField">
		 <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>    
 		 <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
 </fieldType> 

修改solr_home\hotel\conf\schema.xml将userName和passWord指定成为text_ik类型
在这里插入图片描述
重启Tomcat,访问solr测试分词器 成功!
在这里插入图片描述

Solr查询语法

在这里插入图片描述
1.q关键字查询
2.fq对q关键字的过滤查询
3.sort排序 id asc正序 ; id desc倒序
4.start从那个位置开始,rows显示几条数据
5.fl对字段进行过滤;列:只显示id和userName字段:id userName
6.wt数据的返回类型

Solr多字段的匹配

对多个字段进行检索

步骤:在\solr_home\test\conf\schema.xml下新建指定的multiValued=“true”
配置copyField如下:
在这里插入图片描述
测试:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值