我准备用两部分来讲述SOLR的体验。第一部分,牵涉到后端,主要是SOLR的安装、启动、数据库配置;第二部分,牵涉到前端,主要是用Solarium提供的PHP接口在PHP中进行操作。
本篇是第一部分。
SOLR由Apache发行,是一个源自Apache Lucene的开源、企业级、搜索引擎项目。 在Sitepoint.com的这一系列文章详细讲述了SOLR和Solarium,有兴趣的读者可以自行浏览。
安装、启动SOLR当前版本为4.8.0,以压缩包方式发布,有发行版现成使用和源代码供自行编译。下载地址:https://lucene.apache.org/solr/downloads.html
SOLR发行包不大,压缩后仅150M左右。解压到某个目录后,安装就可以认为已经完成——当然还需要正确版本的Java支持,SOLR对Java的要求是在1.7以上。我的安装目录在:
~/temp/solr-4.8.0
SOLR的发行版有一个内置的样本服务器配置,在example目录下,而其中又有一个样本数据库solr。 首先让我们启动这个数据库,看看有些什么东西。
tr@hp:~/temp/solr-4.8.0/example$ java -jar start.jar
这样就启动了SOLR服务,该服务缺省开放了8983端口的WEB管理界面,我们可以远程访问之:
出现这个界面后,我们可以放心了:SOLR服务已经正常启动。SOLR确实是非常吃内存的服务,2G的内存空间被吃掉了1.75G。看来,要充分跑起SOLR,4G是最低配置了。
在左侧“Core Selector”下拉框中选择一个我们要管理的核心——目前也只有一个,名叫“collection1”,于是就进入该核心的管理页面。在我看来,一个核心或者说这里的collection1,就相当于一张表格,用来保存我们需要进行索引和搜索的数据。此时界面变为对该核的管理界面:
左侧边栏有不少新的可选命令。我们会慢慢看。
配置Schema和中文支持在上图中,可以看到SOLR这个实例的运行环境。对该实例,我们需要定制它的schema。SOLR使用XML文件来配置表格的结构,该文件名为schema.xml,位于example/solr/collection1/conf目录下。SOLR似乎只依赖这单一一个文件进行数据库的管理。每次SOLR启动的时候会对该文件进行扫描并进行后台的重建(比如增加/删除了字段,改变了字段的类型和属性等),但是并不会丢失数据 SOLR样本数据库中的schema.xml非常庞大,作为用户,有必要进行定制。
另外一个对于全文搜索引擎而言,至关重要的是其对非英文内容的处理,对我来说,就是对中文的处理。所幸的是,SOLR对中文内容处理的非常好。
schema.xml基本结构如下:
- 首行,必然是标准的XML文件声明:
<?xml version=1.0 encoding=UTF-8 ?> - 跳过很长的注释后,就进入schema声明:
<schema name=resource version=1.5>。name用来标记这个schema,而version是该schema定义时用到的语法的版本,目前就用1.5好了。 - 字段定义。SOLR有几个保留的字段名,分别是
_version_(用于schema的版本更新维护),_root_(在使用嵌套文档的时候要用),id(唯一标识符,建议保留)。 - 字段定义由若干XML属性完成,常见的有:
- name:字段名
- type:字段类型
- indexed:是否要加入索引
- stored:是否存入数据库
- required:是否必须
- multiValued:是否允许有多个该字段的值。比如一个文档的tag通常是多个,因此这个字段的定义我一般会设置multiValued=true
- 字段类型的元定义。这个用来定义上面定义的字段的类型。比如一个int是怎样的类型?这点很奇怪,因为在我看来,这些基本类型应该不用再定义的。但是既然SOLR有这个要求,我们也不妨遵循。
- 这个元定义中需要特别提一提text_cjk这个类型。它就是对一个中文字段进行全文分词检索的关键。如果一个字段是中文内容,并且我们要对它进行全文检索,那么将这个字段设置为这个类型比较好。