全文检索(Solr)

放一盘磁带七八十年代才听了一半就悲伤起来,每一句里的感慨, 都是现在——《二三十》 李荣浩

前言

  每每接触新的东西,应该学会自己试着用计算机思维去看待问题本质,这样往往会取得事半功倍的效果。

全文检索(Solr)

1. 全文检索Solr 简介

  • 一个开源搜索平台,用于构建搜索应用程序

  • Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中

  • Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况

  • 加载进内存,索引查询,保证速度

全文检索(Solr)

2. 全文检索Solr搭建

  • 环境准备:系统环境、软件环境

  • 搭建步骤:服务启动、配置IK

全文检索(Solr)

系统环境

  

系统

Linux CentOS-7

 

全文检索(Solr)

 

    

软件环境

  

tomcat

apache-tomcat-7.0.96

solr

solr-4.10.3

IK

IK+Analyzer+2012FF_hf1

    

安装步骤:

① 首先将所需要的软件 先放在 /usr/local/soft

 

全文检索(Solr)

②  apache-tomcat-7.0.96.tar.gz 进行解压

     tar -zxvf apache-tomcat-7.0.96.tar.gz

移至 /usr/local

mv apache-tomcat-7.0.96.tar.gz /usr/local/solr-tomcat

    

全文检索(Solr)

    

③ solr-4.10.3.tgz 进行解压 并移出解压后的文件至 /usr/local

    进行解压

tar -zxvf solr-4.10.3.taz.tar -C /user/local

 

全文检索(Solr)

④ 进入solr-4.10.3 目录下

全文检索(Solr)

bin:solr的运行脚本

contrib:solr的一些贡献软件/插件,用于增强solr的功能。

dist:该目录包含build过程中产生的warjar文件,以及相关的依赖文件。

docs:solrAPI文档

examplesolr工程的例子目录

l example/solr

该目录是一个包含了默认配置信息的Solr的Core目录。

l example/multicore

该目录包含了在Solr的multicore中设置的多个Core目录。

l example/webapps

 该目录中包括一个solr.war,该war可作为solr的运行实例工程。

licenses:solr相关的一些许可信息 

/usr/local/solr-4.10.3/example/solr/collection1

说明:

collection1:叫做一个Solr运行实例SolrCoreSolrCore名称不固定,一个solr

行实例对外单独提供索引和搜索接口。

solrHome中可以创建多个solr运行实例SolrCore

一个solr的运行实例对应一个索引目录。

confSolrCore的配置文件目录

 

⑤  /usr/local/solr-4.10.3/example/webapps 下的 solr.war

    cp solr.war /usr/local/solr-tomcat/webapps

  拷贝到 /usr/local/solr-tomcat/webapps

    

全文检索(Solr)

拷贝后:

切入到 /usr/local/solr-tomcat

创建 解压并 删除

mkdir solr && unzip solr.war -d solr && rm -rf solr.war

   

全文检索(Solr)

 

⑥ 修改 solr 文件下的 web.xml 文件(毕竟是 拷贝过来的一个应用)

/usr/local/solr-tomcat/webapps/solr/WEB-INF

 

全文检索(Solr)

vim web.xml

 

全文检索(Solr)

全文检索(Solr)

⑦ 将这里的 lib下的 jar /usr/local/solr-tomcat/webapps/solr/WEB-INF/lib

全部拷贝到 tomcat 下的lib下去

cp * /usr/local/solr-tomcat/lib/

搭建步骤

tomcat服务启动

1) 启动tomcat

    

全文检索(Solr)

2) 页面访问 ip:8080/solr

这里是自己虚拟机,ip端口未做修改,在服务器上,可以做 Nginx域名转发

 

全文检索(Solr)

页面出来后,说明Solr服务已经起来了。接下来 就是配置 Solr分词器

全文检索(Solr)

Dashboard 仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm 信息。

Logging Solr运行日志信息

Cloud CloudSolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单

Core Admin Solr Core的管理界面。Solr Core Solr的一个独立运行实例单位,它可以对外提供索引和搜索服务,一个Solr

程可以运行多个SolrCoreSolr实例),一个Core对应一个索引目录。

Java Properties SolrJVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。

Thread Dump显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。

Analysis

 

全文检索(Solr)

通过此界面可以测试索引分析器和搜索分析器的执行情况。

 

Dataimport

可以定义数据导入处理器,从关系数据库将数据导入 Solr索引库中。

Documents 

通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下

/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内

容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。

全文检索(Solr)

  

Query

通过/select执行搜索索引,必须指定“q”查询条件方可搜索

 

全文检索(Solr)

示例:

 

全文检索(Solr)

 配置IK分词器

没有加入中文分词前,solr本身默认分词器对中文都是拆分成一个个字的,但大部分时候使用都是输入一句话,被拆分成一个个字的话,很难搜到想要的结果,这个时候就必须引入中文分词器.

配置步骤:

① 解压 IK+Analyzer+2012FF_hf1.zip

全文检索(Solr)

 

② 解压后

 

全文检索(Solr)

③  IKAnalyzer2012FF_u1.jar 放到 /tomcat-solr/webapps/solr/WEB-INF/lib     

④ /tomcat-solr/webapps/solr/WEB-INF 目录下创建一个classes的文件,

将解压后的IKAnalyzer.cfg.xml;stopword.dic 移入

 ext.dic(这个自己创建)

  

全文检索(Solr)

全文检索(Solr)

     

   

⑤ 修改IKAnalyzer.cfg.xml配置文件

   ext.dic:配置自己需要分词的词语或者句子

   stopword.dic:配置不需要分词的词语

   

全文检索(Solr)

     

⑥ .配置IK到solr中

找到/usr/local/solr-4.10.3/example/solr/collection1/conf

配置文件目录(/usr/local/solr-4.10.3/example/solr/collection1/conf

)的文件schema.xml 

   

全文检索(Solr)

   

全文检索(Solr)

全文检索(Solr)

 

Schema.xml

FieldType域类型定义

下边“text_general”Solr默认提供的FieldType,通过它说明FieldType定义的 内容:

 

全文检索(Solr)

FieldType子结点包括:name,class,positionIncrementGap等一些参数:

name:是这个FieldType的名称

class:是Solr提供的包solr.TextFieldsolr.TextField

允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer 和多个过滤器(filter

positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白 间隔,避免短语匹配错误,此值相当于Lucene的短语查询设置slop值,根据经 验设置为100 FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进 行查询的时候要使用的分析器analyzer,包括分词和过滤 索引分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilte rFactory停用词过滤器,solr.LowerCaseFilterFactory小写过滤器。 搜索分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilte

rFactory停用词过滤器,这里还用到了solr.SynonymFilterFactory同义词过滤器。

Field域类型定义

fields结点内定义具体的Fieldfiled定义包括name,type(为之前定义过的

各种FieldType,indexed(是否被索引),stored(是否被储存),multiValued

是否存储多个值)等属性。 如下:

<field name="name" type="text_general" indexed="true" stored="true"/>

<field name="features" type="text_general" indexed="true" stored="true"

multiValued="true"/>

multiValued:该Field如果要存储多个值时设置为truesolr允许一个Field存储多个值

uniqueKey

Solr中默认定义唯一主键keyid域,如下:

Solr在删除、更新索引时使用id域进行判断,也可以自定义唯一主键。

copyField复制域

copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检 索:

比如,输入关键字搜索title标题内容content 定义titlecontenttext的域:

根据关键字只搜索text域的内容就相当于搜索titlecontent,将titlecontent 复制到text中,如下:Solr 全文检索服务 :

dynamicField动态域

动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义

一个 dynamicFieldname *_i,定义它的typetext,那么在使用这个字段的时候,任何以_i结尾的字段

都被认为是符合这个定义的,例如:name_igender_ischool_i等。

 

示例:

 

全文检索(Solr)

⑦ 分词已经成功加入solr,重启solr服务器

 

全文检索(Solr)

3.全文检索Solr 接入

集成入项目

项目环境

① SpringBoot

② Mybatis-Plus

③ Jdk1.8

④ Maven引入依赖

 

全文检索(Solr)

 

全文检索(Solr)

    

1.1.1.2. 配置依赖

① yml配置文件

 

全文检索(Solr)

那么这样配后,怎么读取到配置?

定位到源码

 

全文检索(Solr)

当项目启动就会加载配置 读取

 

全文检索(Solr)

 

② 引入API

当项目获取到了请求路径后,当调用接口时,底层会封装请求路径

示例:

全文检索(Solr)

 

创建实体

 

全文检索(Solr)

 

引入 SolrTemplate

全文检索(Solr)

 

 

1.1.2. 集成入系统平台

1.1.2.1. Nginx域名转发

Nginx 中 配置域名转发 Solr服务

 

全文检索(Solr)

1.1.2.2. 发布部署

① Nginx 中 配置域名转发 Solr接口

 

全文检索(Solr)

② 打包 install Solr服务

全文检索(Solr)

 

③ 发布线上环境

mvn clean install:删除目标文件夹、编译代码并打包、将打好的包放置到本地仓库中

全文检索(Solr)

 

平台使用

① 数据库 存储 分类、问题、答案

② 查询接口 将数据 加载进Solr

 

赶快来分享关注吖

全文检索(Solr)

全文检索(Solr)

全文检索(Solr)

全文检索(Solr)

喜欢记得来一个

全文检索(Solr)

相关文章: