1 Solr介绍
1.1 什么是solr
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
使用Solr 进行创建索引和搜索索引的实现方法很简单,如下:
- 创建索引:客户端(可以是浏览器可以是Java程序)用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr服务器根据xml文档添加、删除、更新索引 。
- 搜索索引:客户端(可以是浏览器可以是Java程序)用 GET方法向 Solr 服务器发送请求,然后对 Solr服务器返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建页面UI的功能,但是Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
1.2 Solr和Lucene的区别
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索应用。Lucene仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索应用。
Solr的目标是打造一款企业级的搜索引擎系统,它是基于Lucene一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
2 Solr安装配置
2.1 下载solr
Solr和lucene的版本是同步更新的,最新的版本是5.2.1
本课程使用的版本:4.10.3
下载地址:http://archive.apache.org/dist/lucene/solr/
下载版本:4.10.3
Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
下载lucene-4.10.3.zip并解压:
bin:solr的运行脚本
contrib:solr的一些扩展jar包,用于增强solr的功能。
dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
docs:solr的API文档
example:solr工程的例子目录:
example/solr:
该目录是一个标准的SolrHome,它包含一个默认的SolrCore
example/multicore:
该目录包含了在Solr的multicore中设置的多个Core目录。
example/webapps:
该目录中包括一个solr.war,该war可作为solr的运行实例工程。
licenses:solr相关的一些许可信息
2.2 运行环境
solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器,相关环境如下:
Solr:4.10.3
Jdk环境:1.7.0_72(solr4.10 不能使用jdk1.7以下)
Web服务器(servlet容器):Tomcat 7X
2.3 SolrCore配置
2.3.1 SolrHome和SolrCore
SolrHome是Solr运行的主目录,该目录中包括了多个SolrCore目录。SolrCore目录中包含了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore。
一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。
2.3.2 目录结构
SolrHome目录:
SolrCore目录:
2.3.3 创建SolrCore
创建SolrCore先要创建SolrHome。在solr解压包下solr-4.10.3examplesolr文件夹就是一个标准的SolrHome。
拷贝solr解压包下solr-4.10.3examplesolr文件夹。
复制该文件夹到本地的一个目录,把文件名称改为solrhome。
注:改名不是必须的,只是为了便于理解
打开SolrHome目录
SolrCore创建成功。
2.3.4 配置SolrCore
在conf文件夹下有一个solrconfig.xml。这个文件是来配置SolrCore实例的相关信息。如果使用默认配置可以不用做任何修改。它里面包含了不少标签,但是我们关注的标签为:lib标签、datadir标签、requestHandler标签。
2.3.4.1 lib 标签
在solrconfig.xml中可以加载一些扩展的jar,solr.install.dir表示solrCore的目录位置,需要如下修改:
然后将contrib和dist两个目录拷贝到E:12-solr 505下
2.3.4.2 datadir标签
每个SolrCore都有自己的索引文件目录 ,默认在SolrCore目录下的data中。
data数据目录下包括了index索引目录 和tlog日志文件目录。
如果不想使用默认的目录也可以通过solrConfig.xml更改索引目录 ,如下:
2.3.4.3 requestHandler标签
requestHandler请求处理器,定义了索引和搜索的访问方式。
通过/update维护索引,可以完成索引的添加、修改、删除操作。
提交xml、json数据完成索引维护,索引维护小节详细介绍。
通过/select搜索索引。
设置搜索参数完成搜索,搜索参数也可以设置一些默认值,如下:
<requestHandler name="/select" class="solr.SearchHandler">
<!-- 设置默认的参数值,可以在请求地址中修改这些参数-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int><!--显示数量-->
<str name="wt">json</str><!--显示格式-->
<str name="df">text</str><!--默认搜索字段-->
</lst>
</requestHandler>
2.4 Solr工程部署
由于在项目中用到的web服务器大多数是用的Tomcat,所以就讲solr和Tomcat的整合。
2.4.1 安装Tomcat
2.4.2 把solr.war部署到Tomcat中
1、 从solr解压包下的solr-4.10.3examplewebapps目录中拷贝solr.war
2、 复制到tomcat安装目录的webapps文件夹下
2.4.3 解压缩solr.war
使用压缩工具解压或者启动tomcat自动解压。解压之后删除solr.war
2.4.4 添加solr服务的扩展依赖包(日志包)
把solr解压包下的solr-4.10.3examplelibext目录下的所有jar包拷贝。
复制到解压缩后的solr工程的WEB-INFlib目录
2.4.5 添加log4j.properties
1、 把solr解压包下solr-4.10.3example
esourceslog4j.properties文件进行拷贝
2、 在解压缩后的solr工程中的WEB-INF目录中创建classes文件夹
3、 复制log4j.properties文件到刚创建的classes目录
2.4.6 在solr应用的web.xml文件中,加载SolrHome
修改web.xml使用jndi的方式告诉solr服务器。
Solr/home名称必须是固定的。
2.4.7 启动Tomcat进行访问
访问http://localhost:8080/solr/
出现以下界面则说明solr安装成功!!!
2.5 管理界面功能介绍
2.5.1 Dashboard
仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。
2.5.2 Logging
Solr运行日志信息
2.5.3 Cloud
Cloud即SolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单,该部分功能在第二个项目,即电商项目会讲解。
2.5.4 Core Admin
Solr Core的管理界面。在这里可以添加SolrCore实例。
2.5.5 java properties
Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。
2.5.6 Tread Dump
显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
2.5.7 Core selector(重点)
选择一个SolrCore进行详细操作,如下:
2.5.7.1 Analysis(重点)
通过此界面可以测试索引分析器和搜索分析器的执行情况。
注:solr中,分析器是绑定在域的类型中的。
2.5.7.2 dataimport
可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。
默认没有配置,需要手工配置。
2.5.7.3 Document(重点)
通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:
overwrite=”true” : solr在做索引的时候,如果文档已经存在,就用xml中的文档进行替换
commitWithin=”1000” : solr 在做索引的时候,每个1000(1秒)毫秒,做一次文档提交。为了方便测试也可以在Document中立即提交,后添加“”
2.5.7.4 Query(重点)
通过/select执行搜索索引,必须指定“q”查询条件方可搜索。
2.6 多solrcore配置
配置多SolrCore的好处:
1. 一个solr工程对外通过SorlCore 提供服务,每个SolrCore相当于一个数据库,这个功能就相当于一个mysql可以运行多个数据库。
2. 将索引数据分SolrCore存储,方便对索引数据管理维护。
3. SolrCloud集群需要使用多core。
复制原来的core目录为collection2,目录结构如下:
修改collection2下的core.properties,如下:
演示多core的使用,在collection1和collection2中分别创建索引、搜索索引。