solr新手指南

最近项目中有用到solr作为搜索引擎,然后感觉中文资料比较少,所以自己结合网上的一些资料和英文文档写出了以下指南,有错误的地方还望指正。

1. 简介
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。(来自百度百科=。=)

2. 安装

  • 安装:
    在安装solr之前,你需要安装1.7或者更高版本的JRE。
    在solr官网上下载5.3.1版本的solr,然后解压到你想安装的文件夹。解压完后,你可以运行$ bin/solr start来启动solr,solr会默认运行在8983端口,你可以使用$ bin/solr -help来查看命令帮助。
    成功启动后,你可以访问http://localhost:8983/solr/ 来查看solr的管理界面。
  • 创建core:
    在开始用solr进行索引和搜索之前,你需要创建一个core(相当于mysql的database)。
    我们进入/server/solr/目录,新建一个core_example(此处自己命名)目录,,然后将/server/solr/configsets/basic_configs下的conf目录copy至该目录,并且再新建个data目录,用来存储数据和索引。
    然后进入solr的管理页面,在core admin处新建一个core,将instanceDir和dataDir指向你刚才创建的core_example和core_example/data目录,点击确定后,重启solr后,你就可以在管理页面的”core selector”的下拉框中选择刚才创建的core了,这样一个core就创建完成了。

3. 配置

  • documents:
    solr的基本数据单元是一个document,可以把document想象成mysql表中的一行数据,document中的字段类型和字段名称都是在schema.xml中定义的。
  • schema.xml:
    在schema.xml中,你需要去定义field,相当于你去设计mysql字段,以下是schema.xml中默认定义的id字段:
    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    “name”便是该field的名字,”type”是指该field的类型(solr系统自己定义了多种类型,用户也可以自己定义field type),”indexed”为true表示该字段会被索引,”stored”为true表示该字段会被存储,”required”为true表示该字段是必须的,”multiValued”为true表示该一个document在该字段上会包含多个值。
    所以在你用solr进行搜索之前,你需要知道你要搜索的数据有哪些字段,哪些字段需要进行索引,哪些字段需要存储,然后定义好schema.xml。最后记得重启solr。

4. 整合中文分词
全文检索引擎Solr系列——整合中文分词组件IKAnalyzer,这篇文章已经把如何整合的过程讲述地比较清楚了。但是其中自己重新实现IKAnalyzerSolrFactory的例子中有几处代码错误,所以经过我自己的尝试后,我将正确的步骤和代码整理如下:

  • https://github.com/blueshen/ik-analyzer 下载IK源码,这里用maven作为包管理工具,这样你就不用从官网上下载源码后,还要自己导入依赖库文件。
  • 新建IKAnalyzerSolrFactory类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package org.wltea.analyzer.lucene;
import java.io.Reader;
import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
//lucene:4.8之前的版本
//import org.apache.lucene.util.AttributeSource.AttributeFactory;
//lucene:4.9
import org.apache.lucene.util.AttributeFactory;
public class IKAnalyzerSolrFactory extends TokenizerFactory{
private boolean useSmart;
public boolean useSmart() {
return useSmart;
}
public void setUseSmart(boolean useSmart) {
this.useSmart = useSmart;
}
public IKAnalyzerSolrFactory(Map<String,String> args)
{
super(args);
this.setUseSmart(
args.get("useSmart").toString().equals("true"));
}
@Override
public Tokenizer create(AttributeFactory factory) {
Tokenizer _IKTokenizer =
new IKTokenizer(this.useSmart);
return _IKTokenizer;
}
}
  • 运行mvn clean install,将源码打包成.jar文件。再按照上述文章的步骤集成至solr即可。
  • 最后别忘记重启solr(添加停用词和用户自定义词典后都需要重启)。这样就实现了索引时使用最细粒度分词,查询时最大分词(智能分词)的效果!

5. 从mysql导入数据
Solr之搭建Solr5.2.1服务并从Mysql上导入数据,这篇文章已经写的比较详细了。

6. 其他
由于solr的索引和查询命令在官网上面都有说明,而且不同的语言应该都有相应的sdk,所以我在这就不再赘述。我用的是php,所以就推荐一个php操作solr的sdk:solariumphp/solarium
这里在附上一个solr的英文文档链接:apache-solr-ref-guide,schema.xml定义和indexing,search参数在里面都有详细的说明。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器