Solr介绍
什么叫做全文检索呢?这要从我们生活中的数据说起。
我们生活中的数据总体分为两种:结构化数据和非结构化数据。
1、结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
2、非结构化数据:指不定长或无固定格式的数据,如邮件,word 文档等。
非结构化数据又一种叫法叫全文数据。
按照数据的分类,搜索也分为两种:
1、对结构化数据的搜索:如对数据库的搜索,用 SQL 语句。
2、对非结构化数据的搜索:如利用 windows 的搜索也可以搜索文件内容,Linux 下的 grep 命令,再如用 Google 和百度可以搜索大量内容数据。
Solr简介
Solr 是基于 Lucene 的面向企业搜索的 web 应用 Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接 口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;
也可以通过 Http Get 操作提出查找请求,并得到 xml/json 格式的返回结果。
特点:Solr 是一个高性能,采用 Java5 开发,基于 Lucene 的全文搜索服务器。同时对其进行了扩展,提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文检索引擎。
工作方式:文档通过 Http 利用 XML 加到一个搜索集合中。查询该集合也是通过 http 收到一个 XML/JSON 响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大 Data Schema 来定义字段, 类型和设置文本分析,提供基于 Web 的管理界面等。
Solr的安装
安装Solr服务
1、上传solr资源包至Linux中。
2、在Linux中解压solr资源包。
目录结构
bin:启动 solr 的一些脚本,但是需要依赖 jeety 容器
contrib:存放的是 solr 对第三方插件支持的内容
dist:solr 编译后所产生一些文件夹。War 或者是 jar
example:是 solr 的案例。在该目录下有两个文件夹对于我们来说比较重要。
1) webapps:在该目录中存放了一个 solr 的 war 包。与 dist 目录下的那个 war 文 件是 同一个,只是存放的目录及名称不同而已。
2) solr: 是 solr 的一个标准的索引库示例。
3) lib/ext:该目录下存放的是一些日志处理器的 jar 包。Solr 的 web 服务也要依赖于日志 处理的 jar 包。所以我们在安装 solr 服务时,需要将该目录下的 jar 拷贝 给 solr 服务
3、安装 Solr 服务
安装 solr 服务就是将 solr 的 war 包,拷贝到 tomcat 的 webapps 目录下。
solr的war包是可以步依赖其他程序独立运行的,这里希望依赖于tomcat,那么需要将该war包拷贝到tomcat的webapps目录下。
4、启动 tomcat,解压 war 包
5、添加服务中所依赖的 jar 包
在解压后的 solr 的项目中,需要依赖一些日志处理的 jar 包。所以在添加依赖的 jar 包时,需要将原来的 war 删除掉。否则 tomcat 再次启动时,会将原来的目录覆盖掉。那么新添加的 jar 包也就没了。注意:在删除 war 包时,一定要在 tomcat 关闭的状态下 删除 war 包。如果在 tomcat 启动状态下删除war包,那么 tomcat 在关闭时会将解压的目录 一并的也删除掉。
安装Solr的索引库
1、在 solr 的解压目录的 example 目录下有个 solr 的目录,就是 solr 的一个基本的索引库示例。
将该索引库拷贝到指定目录下(可以是任意目录),虽然具备任意性。但是也不能太随便。 应该放到/usr/local/solrhome。先创建 solrhome 目录,然后拷贝到该目录中。
2、solr的服务中配置索引库
在solr的服务中配置索引库的位置。 注意:需要配置的路径为索引库的根。可以使用 linux 中的 pwd 命令查看绝对路径。
将该路径添加到 solr 服务中的 web.xml 文件中, Solr 服务在启动时,是通过他的web.xml文件中的节点配置获取索引库的绝对位置的。 vim web.xml 在 web.xml 中找到<env-entry>.注意:该节点默认是注释状态的,我们需要先去掉注释。
然后将 拷贝的索引库的路径添加到该节点的<env-entry-value>节点中
测试访问 Solr 服务
启动tomcat服务,打开浏览器 输入 solr 的访问 url 就可以访问 solr 服务了 ,当出现下图所示内容,代表单机版的Solr服务已经安装成功。
索引库的目录结构及索引库配置
目录结构
solr.xml 配置 solr 集群
collection1(索引库:solr core)
core.properties 设置索引库的名称
data 存放索引
conf 索引库的配置目录
索引库配置
schema.xml 是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,是否 分词,是否存储等等。如何定义索引库中的 Field <field>:用于定义存储结构。 <field name="_version_" type="long" indexed="true" stored="true"/> name: 表示域的名称,是强制必须有的属性 type: 域类型的名称,与 fieldType 元素的 name 属性值对应,是强制必须有的属性。indexed: 是否参与检索,true 即表示需要对该域进行索引。默认值为 false。stored: 是否将 field 域中的内容存储到文档域,简单通俗的来说,就是你这一个 field 需不需要被当作查询结果返回。required:表示这个域是否是必须要在 document 中存在,默认值为 false,如果此配 置项设为 true,则你的 document 中必须要添加此域,否则你创建索引时会抛异常。 如何定义索引库中的 FieldType <fieldType>:定义域的类型 <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> name:域类型的名称,作为域类型标识符存在,在定义域(Field)时使用的类型 (FieldType)属性就是域类型的名称。 class:域类型的数据类型,该属性指向的是 solr 中的已定义的类型,或者是用户定 义的类型,域类型中的数据会被初始化成 class 执行类类的对象。 sortMissingFirst/sortMissingLast:控制当排序域的值不存在时该文档(Document) 所在队列的位置。true 是则在队头,false队尾如何定义索引库中的 CopyField <copyField>:复制域。可实现更新与查询分离。<copyField source="item_title" dest="item_keywords"/> source:源域dest:目标域
Solr 的索引机制
正排索引
以文档的 ID 为关键字,用文档去查找每个文档中的关键字的位置信息,直到找出所有包含查询关键字的文档。
倒排索引
对数据进行分析,抽取出数据中的词条,以词条作为 key,对应数据的存储位置作为 value,实现索引的存储。这种索引称为倒排索引。
当 solr 存储文档时,solr 会首先对文档数据进行分词,创建索引库和文档数据库。所谓 的分词是指:将一段字符文本按照一定的规则分成若干个单词。
可以理解为操作与正排索引完全相反,反向索引通过关键字去查找拥有该关键字的文档。
需要注意的是,solr并不会对索引库中所有域都做倒排索引的,只有当field的type属性为text_general时,在数据存储时才会采用倒排索引。
Solr中文分词器配置
1、上传中文分词器 jar 包,以及配置文件至Linux中。
IK Analyzer 2012FF_hf1.zip
2、将中文分词器的配置文件以及jar包拷贝到Solr所对应的目录下
注意:
配置文件需要放到 classes 目录下。 在 solr 中的 WEB-INF 下时没有 classes 目录的。需要先创建一个
Jar 包放到 WEB-INF/lib 目录下
3、在索引库找到schema.xml,打开进行配置。
4、访问solr测试分词
Solr管理界面
Dashboard:可查看到 solr 运行时间、solr 版本, 系统内存、虚拟机内存的使用情况。
Logging:显示solr的日志,也可以更改日志的级别。
Core Admin:Add Core(添加核心), Unload(卸载核心),Rename(重命名核心),Reload(重 新加载核心),Optimize(优化索引库) Add Core 是添加 core :主要是在 instanceDir 对应的文件夹里生成一个core.properties 文件。
也就是添加或者…索引库。
Java Properties:可以查看java相关的一些属性。
Thread Dump:查看每个线程的详细信息,以及状态信息。
Core Selecter:选择索引库。
overview:包含基本统计如当前文档数;和实例信息如当前核心的配置目录
Analysis:检验分词效果。
Dataimport:导入数据。
Documents:索引的相关操作,如:增加,修改,删除等。
Files:安装的索引库下的 core 下的 conf 下的相关文件,可单击查看里面的内容。
Ping:查看当前核心库还是否工作的以及响应时间。
Plugins /stats:Solr 自带的一些插件以及安装的插件的信息以及统计。
Query:查询页面。
Replication:显示你当前 Core 的副本,并提供 disable/enable 功能。
Schema:展示该 Core 的 shema.xml 文件中的内容