`

Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)

阅读更多

Apache Solr 介绍

Solr 是什么?

  Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解Java 技术会有用却不是必须的要求。

  Solr 主要特性有:强大的全文检索功能,高亮显示检索结果,动态集群,数据库接口和电子文档(Word ,PDF 等)的处理。而且Solr 具有高度的可扩展,支持分布搜索和索引的复制。

Lucene 是什么?

  Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。

  目前已经有很多应用程序的搜索功能是基于 Lucene ,比如 Eclipse 帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。

Solr VS Lucene

  Solr 与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene ,因为Solr 底层的核心技术是使用Apache Lucene 来实现的,简单的说Solr 是Lucene 的服务器化。需要注意的是Solr 并不是简单的对Lucene 进行封装,它所提供的大部分功能都区别于Lucene 。

安装搭建Solr

安装 Java 虚拟机

  Solr 必须运行在Java1.5 或更高版本的Java 虚拟机中,运行标准Solr 服务只需要安装JRE 即可,但如果需要扩展功能或编译源码则需要下载JDK 来完成。可以通过下面的地址下载所需JDK 或JRE :

安装中间件

  Solr 可以运行在任何Java 中间件中,下面将以开源Apache Tomcat 为例讲解Solr 的安装、配置与基本使用。本文使用Tomcat5.5 解压版进行演示,可在下面地址下载最新版本http://tomcat.apache.org/download-55.cgi

安装Apache Solr

下载最新的Solr

  本文发布时Solr1.4 为最新的版本,下文介绍内容均针对该版本,如与Solr 最新版本有出入请以官方网站内容为准。Solr官方网站下载地址:http://www.apache.org/dyn/closer.cgi/lucene/solr/

Solr 程序包 的目录结构

  • build :在solr 构建过程中放置已编译文件的目录。

  • client :包含了一些特定语言调用Solr 的API 客户端程序,目前只有Ruby 可供选择,Java 客户端叫SolrJ 在src/solrj 中可以找到。

  • dist :存放Solr 构建完成的JAR 文件、WAR 文件和Solr 依赖的JAR 文件。

  • example :是一个安装好的Jetty 中间件,其中包括一些样本数据和Solr 的配置信息。

    • example/etc :Jetty 的配置文件。

    • example/multicore :当安装Slor multicore 时,用来放置多个Solr 主目录。

    • example/solr :默认安装时一个Solr 的主目录。

    • example/webapps :Solr 的WAR 文件部署在这里。

  • src :Solr 相关源码。

    • src/java :Slor 的Java 源码。

    • src/scripts :一些在大型产品发布时一些有用的Unix bash shell 脚本。

    • src/solrj :Solr 的Java 客户端。

    • src/test :Solr 的测试源码和测试文件。

    • src/webapp :Solr web 管理界面。管理界面的Jsp 文件都放在web/admin/ 下面,可以根据你的需要修改这些文件。

  Solr 的源码没有放在同一个目录下,src/java 存放大多数文件,src/common 是服务器端与客户端公用的代码,src/test 放置solr 的测试程序,serlvet 的代码放在src/webapp/src 中。

Solr 主目录结构

一个运行的Solr 服务其主目录包含了Solr 的配置文件和数据(Lucene 的索引文件)

Solr 的主目录展开后为如下结构:

  • bin :建议将集群复制脚本放在这个目录下。

  • conf :放置配置文件。

    • conf/schema.xml :建立索引的schema 包含了字段类型定义和其相关的分析器。

    • conf/solrconfig.xml :这个是Solr 主要的配置文件。

    • conf/xslt :包含了很多xslt 文件,这些文件能将Solr 的XML 的查询结果转换为特定的格式,比如:Atom/RSS。

  • data :放置Lucene 产生的索引数据。

  • lib :放置可选的JAR 文件比如对Slor 扩展的插件,这些JAR 文件将会在Solr 启动时加载。

如何 设置 主目录

  1. 通过Java system property ,属性的名称是:solr.solr.home 。

  2. 通过JNDI 将主目录的路径绑定到java:comp/env/solr/home 。

  3. 通过修改web.xml 位置在:src/web-app/web/WEB-INF ,

1
2
3
4
5
<env-entry>
	<env-entry-name>solr/home</env-entry-name>
	<env-entry-value>solr/</env-entry-value>
	<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

  如果Solr 主目录没有指定则默认设置为solr/

发布运行Solr

  将apache-solr-1.4.0/dist/apache-solr-1.4.0.war 从安装包中解压到<tomcat home>/webapps 下。WAR 是一个完整的web 应用程序,包括了Solr 的Jar 文件和所有运行Solr 所依赖的Jar 文件,Jsp 和很多的配置文件与资源文件,这里需要注意的是:WAR 文件中不包括Solr 主目录,因此在启动tomcat 之前我们要先指定Solr 的主目录。

  将安装程序中的apache-solr-1.4.0/example/solr 文件夹解压到<tomcat homt>/ 下,然后在<tomcat home>/bin/catalina.bat 第一行添加如下内容:

set JAVA_OPTS=%JAVA_OPTS% -Dsolr.solr.home=<tomcat home>/solr

注:Windows 以外操作系统需修改 catalina.sh 文件。

启动tomcat ,apache-solr-1.4.0.war 自动发布为web 应用。

点击链接访问Solr 控制台界面,http://localhost:8080/apache-solr-1.4.0/ ,显示如下界面表示启动成功。

图 1 Solr 欢迎界面

图 2 管理控制台界面

使用Java 接口访问Solr 服务

  SolrJ 是Solr 服务器的一个Java 接口,使用该接口再也不同为虑客户端与服务器端交互时格式解析和转换的问题烦恼了,取而代之的是用你熟悉的对象来进行相关的操作,而且随着Solr 的不断升级SolrJ 也会同样提供这些新加入的功能。

SolrJ (Solr1.4 )依赖的Jar 包

  • commons-codec-1.3.jar
  • commons-fileupload-1.2.1.jar
  • commons-httpclient-3.1.jar
  • commons-logging-1.0.4.jar
  • commons-io-1.4.jar
  • geronimo-stax-api_1.0_spec-1.0.1.jar
  • solr-solrj-1.4.0.jar
  • wstx-asl-3.2.7.jar
  • stax-api-1.0.1.jar
  • slf4j-api-1.5.5.jar
  • slf4j-simple-1.5.5.jar

创建 SolrServer

  SolrJ 中有2 种SolrServer 对象,CommonsHttpSolrServer 与EmbeddedSolrServer ,他们都是线程安全的并建议使用单例模式来使用他们,因为动态创建会造成连接泄露。

  • Create CommonsHttpSolrServer
1
2
String url = "http://localhost:8983/solr";
SolrServer server = new CommonsHttpSolrServer( url );
  • Create EmbeddedSolrServer
1
2
3
4
5
// solr.solr.home 属性也可以通过 JVM 参数设置
System.setProperty("solr.solr.home", "/home/shalinsmangar/work/oss/branch-1.3/example/solr");
CoreContainer.Initializer initializer = new CoreContainer.Initializer();
CoreContainer coreContainer = initializer.initialize();
EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");

添加

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
public SolrServer getSolrServer(){
    // 对象实例可以重复使用
    return new CommonsHttpSolrServer();
}
 
SolrServer server = getSolrServer();
// 清空之前建立的索引数据
server.deleteByQuery( "*:*" );
// 创建一个文档
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField( "id", "id1", 1.0f );
doc1.addField( "name", "doc1", 1.0f );
doc1.addField( "price", 10 );
// 创建另外一个文档
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField( "id", "id2", 1.0f );
doc2.addField( "name", "doc2", 1.0f );
doc2.addField( "price", 20 );
// 创建文档集合
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add( doc1 );
docs.add( doc2 );
// 将文档添加到 Solr 中
server.add( docs );
// 提交
server.commit();

查询

1
2
3
4
5
6
7
8
// 得到一个 SolrServer 实例(通过上面介绍的方法创建)
SolrServer server = getSolrServer();
// 构造一个查询对象
SolrQuery query = new SolrQuery();
query.setQuery( "*:*" );
query.addSortField( "price", SolrQuery.ORDER.asc );
// 查询结果
SolrDocumentList docs = rsp.getResults();

中文分词

分词产品

目前Lucene 的中文分词主要有:

  • paoding :Lucene 中文分词“庖丁解牛” Paoding Analysis 。
  • imdict :imdict 智能词典所采用的智能中文分词程序。
  • mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器。
  • ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式。

分词效率

下面是各个分词产品官方提供的数据:

  • paoding :在PIII 1G 内存个人机器上,1 秒 可准确分词 100 万 汉字。
  • imdict :483.64 ( 字节/ 秒) ,259517( 汉字/ 秒) 。
  • mmseg4j : complex 1200kb/s 左右, simple 1900kb/s 左右。
  • ik :具有 50 万字 / 秒的高速处理能力。

自定义词库

  • paoding :支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载
  • imdict :暂时不支持用户自定义词库。但 原版 ICTCLAS 支持。支持用户自定义 stop words
  • mmseg4j :自带 sogou 词库,支持名为 wordsxxx.dic , utf8 文本格式的用户自定义词库,一行一词。不支持自动检测。 -Dmmseg.dic.path
  • ik : 支持 api 级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码, \r\n 分割。不支持自动检测。

ik 与 solr 集成

以上产品中只有 ik 提供了 Solr ( 1.3 , 1.4 )的分词接口程序,只需修改配置文件即可实现中文分词,配置方法如下;

使用 IKAnalyzer 的配置

1
2
3
4
5
6
7
<schema name="example" version="1.1">
……
<fieldType name="text" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
……
</schema>

使用 IKTokenizerFactory 的配置

1
2
3
4
5
6
7
8
9
10
<fieldType name="text" class="solr.TextField" >
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>
……
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true"/>
……
</analyzer>
</fieldType>
分享到:
评论

相关推荐

    Apache_Solr_初级教程

    ### Apache Solr 初级教程知识点总结 #### 一、Apache Solr 概述 - **全文检索技术的重要性**:随着互联网的发展,信息量日益膨胀,如何高效地从海量信息中提取有价值的内容变得至关重要。全文检索技术作为一种...

    solr中文教程

    虽然 Solr 可以运行在任何兼容的中间件上,但在本教程中,我们将以开源的 Apache Tomcat 为例。从 Apache 官网下载 Tomcat 的解压版,并按照官方文档的指示进行安装。 安装 Solr 本身,可以从 Apache 官网获取最新...

    Apache Solr 搜索架构分析外部设计篇PDF

    以上内容主要介绍了Apache Solr的基础概念、特性、配置方法以及如何进行数据加载和查询操作。对于希望深入了解Solr内部架构和技术细节的读者来说,接下来的部分将会进一步探讨Solr的高级特性与优化技巧。

    solr入门教程

    对于中文处理,Solr 支持多种中文分词器,如 IK 分词器、SmartCN 分词器等,需要在配置文件中指定。 一旦配置完成,你就可以通过浏览器访问 Solr 的管理界面,进行索引创建、导入数据、执行查询等操作。此外,Solr ...

    apache-solr-ref-guide-5.5

    - **定义**:Apache Solr是一款开源的企业级搜索平台,基于Java开发,旨在为用户提供快速、高效的数据检索功能。 - **许可证**:Solr是在Apache License 2.0下发布的,这意味着用户可以在遵守许可证条款的情况下自由...

    apache-solr-ref-guide-7.4(官方英文-文字版本)

    介绍了 Solr 安装和部署时所需的目录结构以及各种配置文件的位置,帮助用户更好地组织和管理 Solr 实例的相关文件。 #### 四、API 示例(API Examples) 本节提供了 Solr API 的具体用法示例,涵盖了从数据索引到...

    Solr配置入门教程

    Solr配置入门教程主要涉及如何将数据从MySQL数据库和XML文件导入到Solr索引中。以下是详细步骤和相关知识点: 1. **下载与解压Solr**:首先需要从官方源获取Apache Solr的最新版本,并将其解压缩到一个合适的文件夹...

    lucene简单介绍及solr搭建使用

    标题“lucene简单介绍及solr搭建使用”涉及了两个主要的开源搜索技术:Lucene和Solr。Lucene是Java开发的一个全文检索库,而Solr则是基于Lucene构建的企业级搜索平台,提供了更高级的功能和管理界面。 **Lucene简介...

    Apache-Solr-Reference-Guide-v3.5

    综上所述,《Apache Solr Reference Guide v3.5》涵盖了Solr的各个方面,从安装到使用、从基础概念到高级功能都有详细的介绍。无论是对于初学者还是有经验的开发人员来说,这份指南都是一个宝贵的资源。通过学习这些...

    solr7.5官方文档

    **Solr 教程**:文档中的教程部分为初学者提供了快速入门的方法,通过简单的步骤演示了如何安装 Solr、创建索引以及执行基本的查询操作。 **快速概览**:这部分内容概述了 Solr 的核心概念和技术特点,包括其架构、...

    Solr开发指南.pdf

    - 安装中文分词器:为了支持中文搜索,需要安装如IK分词器这样的插件。 - 自定义业务系统Field:根据业务需求,自定义字段类型和字段,以便正确索引和检索数据。 - SolrJ介绍:SolrJ是Solr的Java客户端,用于与Solr...

    solr项目和相关资源.rar

    Solr是Apache Lucene项目下的一个企业级搜索服务器,它提供了全文检索、命中高亮、 faceted search(分面搜索)以及与多种数据源集成的能力。这个“solr项目和相关资源.rar”压缩包显然是针对Solr初学者或开发者准备...

    solr技术总结

    #### 五、Solr 4.x 快速入门指南 ##### 1. 下载与安装 - **下载地址**:[Apache Solr 官网](http://lucene.apache.org/solr/) - **操作系统兼容性**: - Linux:`lucene-4.10.3.tgz` - Windows:`lucene-4.10.3....

    solr4.1 reference guide

    Solr是一个基于Apache Lucene库的开源搜索平台,它提供了搜索引擎的核心功能,比如全文搜索、命中高亮显示、动态集群、数据库集成和丰富的查询语言等。Solr非常流行,常被用于构建企业级搜索引擎和大数据查询解决...

    LucidWorks for Solr

    - **LucidWorks for Solr 认证发行版**:LucidWorks for Solr 是一个基于 Apache Solr 构建的企业级搜索平台,提供了一个认证且经过优化的 Solr 发行版,确保了稳定性和性能。它由 LucidImagination 开发和支持,为...

    java开源包1

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    ApacheSolrRef+Guide-v4.0

    ### Apache Solr 参考指南 V4.0 #### 关于本指南 本指南是针对 Apache Solr 4.0 版本的官方使用手册,虽然文档为英文版,但通过详细解读,可以帮助用户深入了解 Solr 的核心功能、配置方法以及最佳实践。 #### ...

    java开源包4

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包101

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

Global site tag (gtag.js) - Google Analytics