Solr学习(一)-基本介绍,安装配置及运用4.9.1版本[亲测]

Solr学习(一)-基本介绍,安装配置及运用4.9.1版本[亲测]

什么是Solr

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

搜索引擎运行原理

    搜索引擎首先导入数据库数据,用户在操作时查询所搜引擎,搜索引擎查询导入的数据将数据返回给用户。具体流程如图。在这里涉及定时导入数据库原始数据,因此Sorl建立索引时,搜索效率提高,实时索引搜索效率不高。在满足降低数据库连接压力的同时,如果不在实时插入查询,solr搜索引擎的暂时可以满足搜索的速度需求。

Solr的功能

    (1)数据导入

    (2)增量更新

    (3)数据检索(全文检索,高亮显示,精确搜索)

 Solr下载地址

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

Solr各个版本介绍

版本发布时间说明
1.12007-01-18-
1.22007-06-06-
1.3.02008-09-15lucene2.3;引入拼写检查、数据导入、排序、分布式搜索
1.4.02009-11-09lucene2.9.3
1.4.12010-06-24-
3.1.02011-03-30Lucene 3.1.0
3.5.02011-11-25-
4.0.02013-01-16Java 1.6以上,ZooKeeper 3.3.6;引入solrcloud
4.1.02013-01-21Java 1.6以上,lucene4.1
4.2.02013-03-11有bug,不能线上使用
4.3.12013-06-14可以线上使用,还未引入5.0的新特性
4.4.02013-07-22有bug,不能线上使用
4.5.02013-10-04Java 1.6以上,ZooKeeper 3.4.5
4.6.02013-11-22有bug,不能线上使用
4.7.12014-04-01Java 1.6以上,最后一个采用旧版配置方法版本
4.8.02014-04-27Java 1.7以上,ZooKeeper 3.4.6
4.9.12014-09-21Java 1.7以上
4.10.02014-09-02Java 1.7以上
5.0.02015-02-19Java 1.7以上,Jetty 8.1.10
5.4.02015-12-10Java 1.7以上,Jetty 9.2.13
5.5.02016-02-20Java 1.7以上,Solr schema version支持1.6
6.0.02016-04-07Java 1.8以上,Jetty 9.3.8
6.1.02016-06-16Java 1.8以上,Jetty 9.3.8
6.2.02016-08-24Java 1.8以上
6.3.02016-11-08Java 1.8以上
6.4.02017-01-20Java 1.8以上
6.5.02017-03-25Java 1.8以上
6.6.02017-06-26Java 1.8以上

Tomcat与JDK对应关系

Solr4.9.1依赖环境

    (1)JDK1.7+
    (2)Tomcat7.0+

Solr安装步骤

初始化安装环境

    (1)安装JDK1.8(具体安装过程不赘述,安装完成后,注意配置环境变量,Path及CLASSPATH)

    (2)准备Tomcat环境(不赘述)

初始配置 solr

--》官网下载solr4.9.1的程序安装包

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

--》本次用于演示下载Windows版本,下载完成后,解压solr的zip包,目录如下

--》将dist\solr-4.9.1.war文件复制到tomcat的webapps目录下,并将文件命名为solr.war

--》复制 solr解压包下example\lib\ext 下所有的jar 到tomcat 的lib目录下

--》在计算机本地G:\Study\solr新建一个文件夹solr_home(用于管理Core的配置目录,当然,路径及文件夹名称,可以在任意路径随便起名字,但建议不要使用sorl), 然后复制solr-4.9.1\example\solr 下的所有文件到 solr_home下

--》启动tomcat,待tomcat启动成功后,关闭tomcat。打开tomcat的webapps目录。此时solr的war包以及被解压成solr文件夹。删除tomcat 的webapps目录下的solr的war包,保留solr文件夹。注意,先关闭tomcat在删除war包,避免tomcat误认为war进行修改将解压的solr文件夹一并删除。

启动完成后,关闭tomcat

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

<env-entry>
    <env-entry-name>solr/home</env-entry-name>
    <env-entry-value>G:/Study/sorl/solr_home</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

--》重新启动tomcat,访问solr(http://localhost:端口号/solr/),如出现以下界面则solr部署成功。

新建数据配置 core

    core(collection):类似于数据库中的视图,一个core代表一种类型的数据集合。

--》测试数据库testdb,创建user测试表

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

--》重新启动tomcat,并访问solr,如出现以下界面,则表示新建user core成功

新增数据库配置

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

--》拷贝数据库连接jar包(mysql-connector-java-5.1.18.jar)到tomcat的lib目录

--》打开user的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>

--》在user的的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/testdb" user="root" password="root" />
	<document name="user_doc">
		<entity name="user" pk="user_id" query=" select u.user_id,u.user_name,u.user_account from user u">
			<field column="user_id" name="userId"/>
			<field column="user_name" name="userName"/>
			<field column="user_account" name="userAccount"/>
		</entity>
	</document>
</dataConfig>

    说明:

         dataSource是数据库数据源。
         Entity就是一张表对应的实体,pk是主键填写数据库里的column名,query是查询语句。
         Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字。

--》打开user的conf目录下的schema.xml(schema.xml 是solr对数据库里的数据进行索引管理和数据字段展示管理的配置文件)文件

        (1)删除多余的field,保留_version_ 和text这个两个field(包括所有dynamicField及copyField,注意不要删除fieldType)
        (2)添加索引字段:这里每个field的name要和data-config.xml里的entity的field的name一样,一一对应。

   <field name="userId" type="int" indexed="true" stored="true"/>
   <field name="userName" type="string" indexed="true" stored="true"/>
   <field name="userAccount" type="string" indexed="true" stored="true"/>

 

    (3)<uniqueKey></uniqueKey>标签填写为主键的field的name

<uniqueKey>userId</uniqueKey>

--》将solr-4.9.1/dist目录下导入数据的JAR包拷贝到tomcat的webapps/solr的lib目录下

--》启动Tomcat,发现报错

--》点击logger,查看错误原因

错误原因为MA147LL/A,之所以会出现这个错误,是因为solr要求主键必须设置为string类型,解决办法如下:

打开solr_home/user/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>

--》重启tomcat,执行数据导入

    说明:

         Common :常用指令

                     (1) full-import:数据导入

                     (2)delta-import:数据更新

                     Clean,指的是是否情况当前更新的索引,Commit:提交。,

事实上,数据导入执行的命令是:dataimport?command=full-import&clean=true&commit=true,而数据更新执行的是:dataimport?command=delta-import&clean=false&commit=true

--》查询数据

     Solr查询语法:

        (1) q – 查询字符串,一般用于关键词过滤
        (2) fl – 指定返回字段
        (3) start –分页查询开始值
        (4) rows – 指定返回结果最多有多少条记录,配合start来实现分页。
        (5) sort – 排序
        (6)wt – (writer type)指定输出格式(xml, json,
        (7) fq – (filter query)过虑查询
                 作用:在q查询符合结果中同时是fq查询符合的

--》到目前为止,我们已经将数据库的数据导入到solr当中了,并且已经查询成功。

配置增量更新

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

--》将资料中提供的apache-solr-dataimportscheduler-1.0.jar包添加至solr的lib目录下

    注:apachesolrdataimportscheduler.jar 的jar 包是apache 提供的用于增量更新的jar 包,但apache 提供的原jar 包中,代码有BUG。 

apache-solr-dataimportscheduler-1.0.jar 下载地址:https://pan.baidu.com/s/1ozicrbGGlY1nDda3eWzH5w  提取码:p9ld 

--》增加增量更新配置文件,在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
#多个core使用,分隔
syncCores=user
# 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,在user的的conf文件夹下并新建 data-config.xml文件中entity节点中添加属性如下:

deltaImportQuery="select u.user_id,u.user_name,u.user_account from user u where u.user_id='${dih.delta.user_id}'" 
            deltaQuery="SELECT u.user_id FROM user u where update_date > '${dih.last_index_time}'"

      说明:deltaQuery用于检查数据是否进行更新,因此设计表时表中必须存有一个date类型的字段表示数据的更新时间,否则无法进行数据更新,deltaImportQuery用于数据更新,一般通过主键进行更新,当然如果你这么玩,如下图,也是没有问题的

--》启动Tomcat进行测试

    (1)重新导入数据

    (2)查询

    (3)修改数据库,数据,注意修改更新时间,且更新时间必须大于上次更新时间

    (4)一分钟后,重新查询

--》完成

配置IKAnalyzer 分词器

    solr 如果是 3.x 版本的用 IKAnalyzer2012_u6.zip 如果是 4.x 版本的用 IK Analyzer2012FF_hf1.zip,一定要对应上,要不然会配置失败。

    IK 分词器3.x 下载地址: https://pan.baidu.com/s/1Eslip-Qfc44ol5jSSBrLQw  提取码:tbf3 

    IK 分词器4.x 下载地址:http://download.csdn.net/download/tjcyjd/8420639  百度网盘:链接:https://pan.baidu.com/s/1R2pxF8jXHd54tqmxIzmRSQ  提取码:lxjx 

--》下载IKAnalyzer,解压,将ik的所有jar文件 拷贝到 webapps\solr\WEB-INF\lib 目录下

--》在webapps\solr\WEB-INF\下新建classes文件夹,将IKAnalyzer.cfg.xml和stopword.dic(用户可以在这里配置自己的扩展停止词字典)文件拷贝到改文件夹下。

--》在webapps\solr\WEB-INF\classes目录下,新建ext.dic文件(用户可以在这里配置自己的扩展字典)

 

--》在 solr_home\user\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\user\conf\schema.xml将userAccount和userName指定成为text_ik类型

   <field name="userName" type="text_ik" indexed="true" stored="true"/>
   <field name="userAccount" type="text_ik" indexed="true" stored="true"/>

--》重启Tomcat,访问solr测试重新导入数据分词器

 

配置Solr对多个字段进行检索

--》编辑user core的conf目录下schema.xml文件,新建field指定multiValued="true”,配置copyField

   <field name="queryContent" type="text_ik" indexed="true" stored="true" multiValued="true"/>
   <copyField source="userAccount" dest="queryContent"/>
   <copyField source="userName" dest="queryContent"/>

--》重启tomcat,并重新导入索引

--》查询

--》完成(附件中,不包含这部分)

 

附件:

Solr学习(一)安装文件.zip 链接:https://pan.baidu.com/s/1XMHSYOYdnhQimtDYHwLZ3w  提取码:xxvx 

Solr学习(一)测试文件.zip 链接:https://pan.baidu.com/s/1-KIibdKE_hLyVjGWYEK3GQ  提取码:s327 

 

参考文献:《Solr配置中文分词器IK Analyzer详解》

参考文献:《Solr与JDK对应版本关系,Tomcat与JDK版本对应关系》

参考文献:《为什么我们项目用Solr而不用ElasticSearch》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丨Anna丨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值