搜索引擎Solr

1. solr简介

1.1 官网介绍

Solr是一个基于Lucene的Java搜索引擎服务器。Solr提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XML/XSLT和 JSON格式)。
它易于安装和配置,而且附带了一个基于HTTP的管理界面。
Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr包装并扩展了Lucene,所以Solr的基本上沿用了Lucene的相关术语。
更重要的是,Solr 创建的索引与Lucene搜索引擎库完全兼容。
通过对Solr进行适当的配置,某些情况下可能需要进行编码,Solr可以阅读和使用构建到其他 Lucene应用程序中的索引。
此外,很多Lucene工具(如Nutch、Luke)也可以使用 Solr创建的索引。

总结一下solr是一个java搜索引擎服务器(是一套war程序),内部集成了Lucene(apache提供的一些对搜索引擎做支持的jar包).

1.2 什么是Solr

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

1.3 solr功能

  • 保存数据
  • 建立索引,维护索引
  • 数据检索(全文检索、高亮检索、精确搜索等)

1.4 solr 依赖环境

  • jdk 1.7+
  • tomcat7+
  • Solr4.10.3

1.5 下载

从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage
下载lucene-4.10.3.zip并解压:目录介绍如下:

  • bin:solr的运行脚本
  • contrib:solr的一些贡献软件/插件,用于增强solr的功能。
  • dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
  • docs:solr的API文档
  • example:solr工程的例子目录:
  • example/solr:
    该目录是一个包含了默认配置信息的Solr的Core目录。
  • example/multicore:
    该目录包含了在Solr的multicore中设置的多个Core目录。
  • example/webapps:
    该目录中包括一个solr.war,该war可作为solr的运行实例工程。
    licenses:solr相关的一些许可信息

2. Solr的安装及配置

2.1 3.2.Solr整合tomcat

#1.说明:我的所有软件都是安装在/usr/local/install目录中
mkdir -p /usr/local/install
#2.将solr-4.10.3.tgz.tgz包使用工具上传至Linux的/usr/local/install目录中
#3.进入/usr/local/install目录中
[root@localhost ~]  cd /usr/local/install/
#4.解压solr-4.10.3.tgz.tgz
[root@localhost ~]  tar –zxf solr-4.10.3.tgz.tgz
#5.将dist\solr-4.10.3.war拷贝到Tomcat的webapp目录下改名为solr.war
[root@localhost ~]  solr-4.10.3/dist/solr-4.10.3.war tomcat-#8.5/webapps/solr.war
#6.启动tomcat后,solr.war自动解压,将原来的solr.war删除。
[root@localhost ~]  ./tomcat-8.5/bin/startup.sh
#7.拷贝example\lib\ext 目录下所有jar包到Tomcat的webapp\solr\WEB-INF\lib目录下
[root@localhost ~] cp solr-4.10.3/example/lib/ext/*.jar tomcat-8.5/webapps/solr/WEB-INF/lib/

#8.拷贝log4j.properties文件
	#在Tomcat下webapps\solr\WEB-INF目录中创建文件 classes文件夹,
	[root@localhost ~]  mkdir tomcat-8.5/webapps/solr/WEB-INF/classes
	#复制Solr目录下example\resources\log4j.properties至Tomcat下webapps\solr\WEB-INF\classes目录 
	[root@localhost ~]  cp solr-4.10.3/example/resources/log4j.properties tomcat-8.5/webapps/solr/WEB-INF/classes/

#9.创建solr_home及配置solrcore的solrconfig.xml文件
	#创建solr_home
	[root@localhost ~]  mkdir solr_home
	#example\solr文件夹下的内容复制到solr_home文件夹下
	[root@localhost ~] cp -rf solr-4.10.3/example/solr/* solr_home/
<!--10.修改Tomcat目录 下webapp\solr\WEB-INF\web.xml文件,如下所示:
设置Solr home-->
<!--配置jndi告诉solr工程我们的solrhome的位置-->
	<env-entry>
		<env-entry-name>solr/home</env-entry-name>
		<env-entry-value>/usr/local/install/solr_home</env-entry-value>
		<env-entry-type>java.lang.String</env-entry-type>
	</env-entry>
#11.停止Tomcat,之后重启
	[root@localhost ~]  ./tomcat-8.5/bin/shutdown.sh
	[root@localhost ~]  ./tomcat-8.5/bin/startup.sh
#12.开发Tomcat端口
	[root@localhost ~] firewall-cmd --zone=public --add-port=8080/tcp --permanent
	[root@localhost ~] systemctl restart firewalld.service
#13.访问solr
	http://192.168.0.201:8080/solr

3.Solr界面功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 新建数据配置core

4.1.新建core(colr把配置的每一个模块都叫core),在solr_home目录下,拷贝collection1文件夹,并改名为hotel。打开hotel文件夹,修改core.properties文件将name修改为hotel

[root@localhost install] cp -rf solr_home/collection1  solr_home/hotel
[root@localhost install] vim solr_home/hotel/core.properties

在这里插入图片描述

4.2.重新启动Tomcat,并访问solr,入出现如下界面,则表示新建成功hotel core成功

[root@localhost install]  ./tomcat-8.5/bin/shutdown.sh
[root@localhost install]  ./tomcat-8.5/bin/startup.sh

在这里插入图片描述

5. 新增数据库配置

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

  1. 拷贝数据库连接jar(mysql-connector-java-5.1.18.jar)到Tomcat的lib目录下
  2. 打开hotel的conf文件夹中的solrconfig.xml文件,在requestHandler name=”/select” class=”solr.SearchHandler”>前面加上一个dataimport的处理器
[root@localhost install] vim solr_home/hotel/conf/solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
     <lst name="defaults">
        <str name="config">data-config.xml</str>
     </lst>
</requestHandler>
  1. 禁用搜索排行:修改solr_home/hotel/conf/solrconfig.xml的配置
[root@localhost install]  vim solr_home/hotel/conf/solrconfig.xml

将以下内容注释掉

<searchComponent name="elevator" class="solr.QueryElevationComponent" >
    <!-- pick a fieldType to analyze queries -->
    <str name="queryFieldType">string</str>
    <str name="config-file">elevate.xml</str>
</searchComponent>
  1. 在hotel的conf文件加下新建data-config.xml文件,配置如下
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
  <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://192.168.1.106:3306/itrip_db"
              user="root"
              password="root"/>
  <document name="hotel_doc">
        <entity name="hotel" pk="id" query="select id,hotelName,address from itrip_hotel">
                <field column="id" name="id"/>
                <field column="hotelName" name="hotelName"/>
                <field column="address" name="address"/>
        </entity>
      </document>
</dataConfig>
  • dataSource是数据库数据源
  • Entity就是一张表对应的实体,pk是主键,query是查询语句
  • Field对应一个字段,column是数据库的column名,后面的name属性对应着Solr的Field的名字。
  1. 打开hotel的conf目录下的schema.xml文件
    1)保留_version_这个field
    2)添加索引字段:这里每个field的name要和data-config.xml里的entity的field的name一样,一一对应
    3)删除多余的field,保留_version_和text这两个field(注意不要删除fieldType)
    4)添加索引字段:这里每个field的name要和data-config.xml里的entity的field的name一样,红色部分为新增内容
[root@localhost install] vim solr_home/hotel/conf/schema.xml
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="id" type="long" indexed="true" stored="true" />
<field name="hotelName" type="string" indexed="true" stored="true" />
 <field name="address" type="string" indexed="true" stored="true"/>
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
<uniqueKey>id</uniqueKey>
 5)将改文件中所有的<copyFiled>标签删除
  1. 将solr-4.10.3/dist/导入数据的jar包拷贝到webapps/solr的lib目录下
    在这里插入图片描述
[root@localhost install] cp solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar tomcat-8.5/webapps/solr/WEB-INF/lib/
[root@localhost install] cp solr-4.10.3/dist/solr-dataimporthandler-extras-4.10.3.jar tomcat-8.5/webapps/solr/WEB-INF/lib/
  1. 启动Tomcat,执行数据导入
    在这里插入图片描述
  2. 查询数据
    在这里插入图片描述

6. 增量更新

以上的步骤我们实现了如何将数据库的数据导入到solr中,接下来需要配置solr的增量更新,即定时将数据库的数据导入到solr中。

  1. 将资料中提供的 apache-solr-dataimports-cheduler jar包添加至solr的目录下
  2. 将资料中提供的 apache-solr-dataimports-cheduler jar包添加至solr的lib目录下。
  3. 增加增量更新配置文件,在 solr_home文件夹下新建conf文件夹,并新建名为
    dataimport.properties的配置文件,配置如下标红的地方为需要修改的地方
[root@localhost install] mkdir solr_home/conf
[root@localhost install] vim solr_home/conf/dataimpirt.properties

文件内容如下:

#################################################
#                                               #
# dataimport scheduler properties               #
#                                               #
#################################################
# to sync or not to sync
# 1-active;anything else-inactive
syncEnabled=1
# which scores 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=hotel,ticket
# 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
# [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
  1. 新增增量更新数据的监听器,在solr的web.xml中加入以下监听器
[root@localhost install] vim tomcat-8.5/webapps/solr/WEB-INF/web.xml
<listener>
   	<listener-class>
   	  org.apache.solr.handler.dataimport.scheduler.ApplicationListener
    </listener-class>
</listener>
  1. 修改导入数据的查询语句SQL
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
  <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver"
	      url="jdbc:mysql://192.168.1.106:3306/itrip_db"
              user="root"
              password="root"/> 
  <document name="hotel_doc">
	<entity name="hotel" pk="id" 
	        query="select id,hotelName,address from itrip_hotel" 
	        deltaImportQuery="select id,hotelName,address from itrip_hotel where id='${dih.delta.id}'" 
			deltaQuery="select id as id from itrip_hotel where modifyDate>'${dih.last_index_time}'">
		<field column="id" name="id"/>
		<field column="hotelName" name="hotelName"/>
		<field column="address" name="address"/>
	</entity>
  </document>
</dataConfig>

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

  1. 启动Tomcat进行测试
    a)启动Tomcat,访问hotel模块
    b)修改数据库中的酒店数据并同时修改数据的modifyDate时间
    c)1分钟后查询酒店数据,确定数据是否更新

7.安装中文分词器

  • 分词器:是从用户输入的一段文本中提取关键词,用于其他业务操作。
  • 常见的java分词器:word分词器、Ansj分词器、Stanford分词器、IK Analyzer分词器
  • 分词器:IK Analyzer分词器
  • Solr如果是3.x版本的用IK Analyzer2012_u6.zip 如果是4.x版本的用IK Analyzer2012FF_hf.zip,一定要对应上,要不然会配置失败。
  • K分词器下载地址:
    https://search.gitee.com/?skin=rec&type=repository&q=IK%20Analyzer&repo=&reponame=&pageno=1

7.1安装步骤

7.1.1.第一步:配置IKAnalyzer的jar包

将IKAnalyzer2012FF_u1.jar拷贝到 Tomcat的webapps/solr/WEB-INF/lib 下。

7.1.2.第二步:IKAnalyzer的配置文件

在Tomcat的webapps/solr/WEB-INF/下创建classes目录

[root@localhost install] mkdir tomcat-8.5/webapps/solr/WEB-INF/classes

将IKAnalyzer.cfg.xml、ext_stopword.dic mydict.dic copy到 Tomcat的
webapps/solr/WEB-INF/classes
注意:ext_stopword.dic 和mydict.dic必须保存成无BOM的utf-8类型

7.1.3.第三步:修改schema.xml文件

修改schema.xml文件
修改solr_home\hotel\conf\schema.xml的schema.xml文件,添加FieldType:

[root@localhost install]# vim solr_home/hotel/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>
7.1.4.第四步:设置业务系统Field

设置业务系统Field

[root@localhost install]# vim solr_home/hotel/conf/schema.xml

修改的内容如下:

<field name="hotelName" type="text_ik" indexed="true" stored="true"/>
<field name="address" type="text_ik" indexed="true" stored="true"/>
如有侵权,请联系我,谢谢!
版权所有:北大青鸟 刘仁贵
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华婷深深

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值