什么是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的配置和运行情况。
solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果
Solr类似webservice,调用接口,实现增加,修改,删除,查询索引库。
Centos下安装与配置
Solr 默认运行在jetty WEB服务下,也可以运行在tomcat服务下,配置稍微有点麻烦,这里不做介绍
-
接下来下载并安装Solr,创建一目录专门存储Solr,找个空间比较大的盘符,使用wget下载,也可以直接其他服务器下载好了,拷贝对应服务器,下载目前最新版本
[root@localhost home]# mkdir solr [root@localhost home]# cd solr [root@localhost solr]# wget http://mirror.bit.edu.cn/apache/lucene/solr/7.4.0/solr-7.4.0.tgz
-
解压solr
[root@localhost solr]# tar -zxvf solr-7.4.0.tgz
-
启动solr服务
[root@localhost solr-7.4.0]# bin/solr start -force 出现 Started Solr server on port 8983 (pid=23452). Happy searching! 表示启动成功,则可以通过浏览器浏览
solr 启动,有两种模式,一种是单机版启动(bin/solr start),一种是分布式版启动(bin/solr start -e cloud)
-
solr 目录说明
- bin:是脚本的启动目录
- contrib:第三方包存放的目录
- dev-tools:跟开发工具相关的包
- dist:编译打包后存放目录,即构建后的输出产物存放的目录
- docs:solr文档的存放目录
- example:示范例子的存放目录,这里展示了DIH,即数据导入处理的例子,这里包含了多个core实例
- licenses:权限相关的
- lucene:solr基于Lucene开发,本身是lucene代码的目录,但是构建后都为空,相关东西已经到jar包中
- server:即solr搜索引擎框架,基于jetty web服务器开发的。包含jetty服务器的配置。(这个目录就类似于一个包含了tomcat服务器,里面有一个基于solr的web工程)
使用Solr
Solr的内核由配置文件、Lucene索引文件和Solr事务日志组成。Jetty上运行的一台Solr服务器可以控制多个内核。每个Solr服务器有且仅有一个包含所有内核的主目录。
创建Solr Core
通过Solr管理页面->Core Admin创建。如果直接创建,会提示
Error CREATEing SolrCore 'new_core': Unable to create core [new_core] Caused by: Can't find resource 'solrconfig.xml' in classpath or '/home/solr/solr-7.4.0/server/solr/new_core'
这是因为在此目录下没有相应的配置文件。官网给出了默认的配置文件,这时需要把默认配置文件拷贝到自己创建的Core目录(new_core)下即可.
[root@localhost solr]# cp -r configsets/_default/* new_core/
最终new_core目录下
[root@localhost new_core]# ls
conf
这是再点击创建"Add Core",则Solr Core创建成功,这是可以在左侧的“Core Selector”看到开始创建的Solr Core
创建成功后,new_core包含以下文件目录
[root@localhost new_core]# ls
conf core.properties data
- conf:配置文件目录;其中solrconfig.xml是定义Solr内核的主要配置,修改了此配置文件,需要在配置界面执行“Reload”;但大多数可以不做修改即可满足我们大部分场景;
- core.properties:内核基本配置信息,它会被Solr主目录自动扫描此文件包含的基本配置信息;
- data:数据目录。
至此 Solr Code创建完毕。
为Solr添加数据
从数据库mysql中导入数据,通过数据库导入器DIH,导入方式分为导入整个数据集(索引整个文档集合)和增量导入(导入上次后的修改),后者不开启额外的进程就可以将数据导入Solr中。具体使用步骤:
- 在conf/solrconfig.xml加载DIH的Jar依赖包,使用solr-dataimporthandler-*.jar作为导入依赖包,
具体配置如下:
-
需要在solrconfig.xml中配置此包依赖,此Jar在dist目录下,
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
-
定义dataimport处理器
<requestHandler name="/dataimport" class="solr.DataImportHandler"> <lst name="defaults"> <str name="config">solr-data-config.xml</str> </lst> </requestHandler>
db-data-config.xml 为数据导入配置,这个我们在conf目录下新建此配置文件。此文件包含外部数据源的引用信息,这些来源将被拉取。
进行了以上配置,可以在管理界面看到导入界面
- 接下来定义数据源,我们的数据源是mysql,所以这里需要配置mysql数据源,通过mysql connector连接数据库。
在contrib下创建mysqldb/lib目标,并下载wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36.jar。
在solrconfig.xml下添加此包的依赖
<lib dir="${solr.install.dir:../../../..}/contrib/mysqldb/lib" regex=".*\.jar" />
编辑配置上面的conf/db-data-config.xml
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
convertType="true"
url="jdbc:mysql://localhost:3306/testdb"
user="test"
password="test"/>
<document>
<entity name="test" query="SELECT * FROM test" >
</entity>
</document>
</dataConfig>
这时我们在管理界面,就可以看到test Entity,同时能在“Configuration”看到要执行的配置文件
然后点击"Execute",执行完毕后点击“Refresh Status” 刷新状态,可以看到执行结果。
界面命令说明:
- abort:停止当前正在进行的操作
- delta-import:调用deltaQuery拉取数据。可以带上几个额外的参数:&clean=true&commit=true等等(和full_import相同)
- full-import:调用query拉取所有数据。请求会马上返回,后台有新线程执行重建索引的操作。可以通过status操作查询状态。额外参数:
- clean:缺省为true。是否在开始重建索引前清除旧索引
- commit:缺省为true。是否提交操作请求
- debug:缺省为false。debug模式,不会commit操作。如果同时需要commit,得带上commit=true参数
- entity:缺省为所有的entity。可以指定某一个或多个entity
- optimize:缺省为true。是否需要在完成操作后优化索引
- reload-config:如果修改了配置文件,执行这个命令使它生效
- status:返回各种统计数据、以及DIH的当前状态
至此,通过Mysql导入数据到Solr完成。
创建字段
在每次有新数据导入时,solr 会自动新增字段,但可能新增的的字段类型并不是想要的,这时可以通过手动修改。选中指定的core,在files文件夹下找到managed-schema文件,里面有样例字段的增加。可以自行参考修改。