★放一盘磁带,七八十年代,才听了一半,就悲伤起来,每一句里的感慨, 都是现在——《二三十》 李荣浩
”
前言
每每接触新的东西,应该学会自己试着用计算机思维去看待问题本质,这样往往会取得事半功倍的效果。
1. 全文检索Solr 简介
一个开源搜索平台,用于构建搜索应用程序
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中
Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况
加载进内存,索引查询,保证速度
2. 全文检索Solr搭建
系统环境
系统 | Linux CentOS-7 |
软件环境
tomcat | apache-tomcat-7.0.96 |
solr | solr-4.10.3 |
IK | IK+Analyzer+2012FF_hf1 |
安装步骤:
① 首先将所需要的软件 先放在 /usr/local/soft 下
② 将 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-4.10.3.tgz 进行解压 并移出解压后的文件至 /usr/local 下
进行解压
tar -zxvf solr-4.10.3.taz.tar -C /user/local
④ 进入solr-4.10.3 目录下
bin:solr的运行脚本
contrib:solr的一些贡献软件/插件,用于增强solr的功能。
dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
docs:solr的API文档
example:solr工程的例子目录:
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运行实例SolrCore,SolrCore名称不固定,一个solr运
行实例对外单独提供索引和搜索接口。
solrHome中可以创建多个solr运行实例SolrCore。
一个solr的运行实例对应一个索引目录。
conf是SolrCore的配置文件目录 。
⑤ 将 /usr/local/solr-4.10.3/example/webapps 下的 solr.war
cp solr.war /usr/local/solr-tomcat/webapps
拷贝到 /usr/local/solr-tomcat/webapps 下
拷贝后:
切入到 /usr/local/solr-tomcat
创建 解压并 删除
mkdir solr && unzip solr.war -d solr && rm -rf solr.war
⑥ 修改 solr 文件下的 web.xml 文件(毕竟是 拷贝过来的一个应用)
/usr/local/solr-tomcat/webapps/solr/WEB-INF
vim web.xml
⑦ 将这里的 lib下的 jar 包 /usr/local/solr-tomcat/webapps/solr/WEB-INF/lib
全部拷贝到 tomcat 下的lib下去
cp * /usr/local/solr-tomcat/lib/
搭建步骤
tomcat服务启动
1) 启动tomcat
2) 页面访问 ip:8080/solr
这里是自己虚拟机,ip端口未做修改,在服务器上,可以做 Nginx域名转发
页面出来后,说明Solr服务已经起来了。接下来 就是配置 Solr分词器
Dashboard: 仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等 信息。
Logging: Solr运行日志信息
Cloud: Cloud即SolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单
Core Admin: Solr Core的管理界面。Solr Core 是Solr的一个独立运行实例单位,它可以对外提供索引和搜索服务,一个Solr工
程可以运行多个SolrCore(Solr实例),一个Core对应一个索引目录。
Java Properties: Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。
Thread Dump:显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
Analysis
通过此界面可以测试索引分析器和搜索分析器的执行情况。
Dataimport
可以定义数据导入处理器,从关系数据库将数据导入 到Solr索引库中。
Documents
通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下
/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内
容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
Query
通过/select执行搜索索引,必须指定“q”查询条件方可搜索
示例:
配置IK分词器
没有加入中文分词前,solr本身默认分词器对中文都是拆分成一个个字的,但大部分时候使用都是输入一句话,被拆分成一个个字的话,很难搜到想要的结果,这个时候就必须引入中文分词器.
配置步骤:
① 解压 IK+Analyzer+2012FF_hf1.zip
② 解压后
③ 将 IKAnalyzer2012FF_u1.jar 放到 /tomcat-solr/webapps/solr/WEB-INF/lib
④ 在/tomcat-solr/webapps/solr/WEB-INF 目录下创建一个classes的文件,
将解压后的IKAnalyzer.cfg.xml;stopword.dic 移入
ext.dic(这个自己创建)
⑤ 修改IKAnalyzer.cfg.xml配置文件
ext.dic:配置自己需要分词的词语或者句子
stopword.dic:配置不需要分词的词语
⑥ .配置IK到solr中
找到/usr/local/solr-4.10.3/example/solr/collection1/conf
配置文件目录(/usr/local/solr-4.10.3/example/solr/collection1/conf
)的文件schema.xml
Schema.xml
FieldType域类型定义
下边“text_general”是Solr默认提供的FieldType,通过它说明FieldType定义的 内容:
FieldType子结点包括:name,class,positionIncrementGap等一些参数:
name:是这个FieldType的名称
class:是Solr提供的包solr.TextField,solr.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结点内定义具体的Field,filed定义包括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如果要存储多个值时设置为true,solr允许一个Field存储多个值
uniqueKey
Solr中默认定义唯一主键key为id域,如下:
Solr在删除、更新索引时使用id域进行判断,也可以自定义唯一主键。
copyField复制域
copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检 索:
比如,输入关键字搜索title标题内容content, 定义title、content、text的域:
根据关键字只搜索text域的内容就相当于搜索title和content,将title和content 复制到text中,如下:Solr 全文检索服务 :
dynamicField动态域
动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义
一个 dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段
都被认为是符合这个定义的,例如:name_i,gender_i,school_i等。
示例:
⑦ 分词已经成功加入solr中,重启solr服务器
3.全文检索Solr 接入
集成入项目
项目环境
① SpringBoot
② Mybatis-Plus
③ Jdk1.8
④ Maven:引入依赖
1.1.1.2. 配置依赖
① yml配置文件
那么这样配后,怎么读取到配置?
定位到源码
即 当项目启动就会加载配置 读取
② 引入API
当项目获取到了请求路径后,当调用接口时,底层会封装请求路径
示例:
创建实体
引入 SolrTemplate
1.1.2. 集成入系统平台
1.1.2.1. Nginx域名转发
在Nginx 中 配置域名转发 Solr服务
1.1.2.2. 发布部署
① 在Nginx 中 配置域名转发 Solr接口
② 打包 install Solr服务
③ 发布线上环境
mvn clean install:删除目标文件夹、编译代码并打包、将打好的包放置到本地仓库中
平台使用
① 数据库 表 存储 分类、问题、答案
② 查询接口 将数据 加载进Solr
赶快来分享关注吖
喜欢记得来一个