篇一:非常经典的solr教程
非常经典的solr教程,照着上面做完全能成功! duogemajia
Solr 3.5 入门配置应用
机器上已安装 : Tomcat 6.0 jdk1.7 mysql 5.0
1 访问 /p/mmseg4j/, http://code.google.com/p/mmseg4j/downloads/detail?name=data.zip&can=2&q
8把本地下载的 mmseg4j 解压缩 , 把里面的mmseg4j-all-1.8.5.jar 文件 拷贝到 Tomcat 6.0\webapps\solr\WEB-INF\lib 目录下
9在 Tomcat 6.0\webapps\solr 目录下新建一个 dic 文件夹 , 把 新下载的 词库 拷贝到 dic 目录下
10 在 \Tomcat 6.0\webapps\solr\conf\multicore\core0\conf\schema.xml 文件的 types 节点里 添加如下节点 :
<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100"><analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="E:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/solr/dic">
</tokenizer>
</analyzer>
</fieldtype>
<fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100"><analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="maxword" dicPath="E:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/solr/dic">
</tokenizer>
</analyzer>
</fieldtype>
<fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100"><analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="E:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/solr/dic">
</tokenizer>
</analyzer>
</fieldtype>
11 在 \Tomcat 6.0\webapps\solr\conf\multicore\core0\conf\schema.xml 文件的 fields 节点里 添加如下节点 :
<field name="simple" type="textSimple" indexed="true" stored="true"
multiValued="true" />
<field name="complex" type="textComplex" indexed="true" stored="true"
multiValued="true" />
<field name="text" type="textMaxWord" indexed="true" stored="true"
multiValued="true" />
12 因为 solr3.5 里有两个 core , 所以针对 core1 重复 10,11 两步
13 对分词进行测试 , 访
问 http://localhost:8180/solr/core0/admin/analysis.jsp?highlight=on
13.1Field[Name]输入: complex
13.2Field Value(index)输入 :中国银行第一分行 ,Field Value(index) 下面的 verbose outpu 点选
13.3点击 Analyze 按钮 , 查看分词结果 : 中国银行 | 第一 | 分行
14 此时 Solr3.5 已经可以进行 分词 , 接下来配置 solr 3.5 连接 mysql 数据库 , 生成索引 , 进行分词
14.1下载 java 的 mysql 驱动 , 本机解压 mysql-connector-java-5.1.18-bin.jar, 然后拷贝到 Tomcat 6.0\webapps\solr\WEB-INF\lib 目录下
14.2在 \Tomcat 6.0\webapps\solr 目录下 新建 db 文件夹
14.3在 \Tomcat 6.0\webapps\solr\db 文件夹下面新建一个 db-data-config.xml 文件 , 内容如下 :
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test" user="root" password="123" />
<document name="messages">
<entity name="message" transformer="ClobTransformer" query="select * from
test1">
<field column="ID" name="id" />
<
field column="Val" name="text" /></entity>
</document>
</dataConfig>
url="jdbc:mysql://localhost:3306/test" user="root" password="123" 这里配置了 mysql 的连接路径 , 用户名 , 密码
<field column="ID" name="id" /><field column="Val" name="text" /> 这里配置的是 数据库里要索引的字段 , 注意name 是 11 步配置的
14.4在 Tomcat 6.0\webapps\solr\conf\multicore\core0\conf 目录下的 solrconfig.xml 文件里 , 添加如下代码 :
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">E:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/solr/db/db-data-config.xml</str>
</lst>
</requestHandler>
“E:/Program Files/Apache Software Foundation/Tomcat
6.0/webapps/solr/db/db-data-config.xml” 是 14.3 配置文件的绝对路径
14.5 在Tomcat 6.0\webapps\solr\conf\multicore\core1\conf\solrconfig.xml路径里重复 14.4
14.6 把本地下载解压的 solr3.5 文件里 , dist 目录下
的 apache-solr-dataimporthandler-3.5.0.jar 和
apache-solr-dataimporthandler-extras-3.5.0.jar Tomcat
6.0\webapps\solr\WEB-INF\lib 目录下
14.7solr3.5 连接 mysql 已经配置完成 , 测试读取 mysql 生成 索引 , 访
问 :http://localhost:8180/solr/core0/dataimport?command=full-import
14.8测试分词查询 , 访问 http://localhost:8180/solr/core0/admin/ 查询数据库里索引列里有的词
注意 , 这仅仅是配置 solr3.5 连接 mysql 生成索引 , 可以执行正常 词语 的查询 , 但是不能执行 对搜索短语的分词 查询
multicore 目录下面多个 core 文件夹 , 每一个都是一个接口 , 有独立的配置文件 , 处理某一类数据 。
multicore/core0/conf/ 目录下的 schema.xml 文件 相当于数据表配置文件 , 它定义了加入索引的数据的数据类型 。文件里有一个 <uniqueKey>id</uniqueKey> 的配置 , 这里将 id 字段作为索引文档的唯一标示符 , 非常重要 。
FieldType 类型 , name 是这个 FieldType 的名称 , class 指向了
org.apache.solr.analysis 包里面对应的 class 名称 , 用来定义这个类型的定义 。在
FieldType 定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤 。
Fields 字段 : 结点内定义具体的字段(类似数据库中的字段) , 就是 field , 包含 name , type(为之前定义过的各种FieldType) , indexed(是否被索引) , stored(是否被存储) , multiValued(是否有多个值)
copeField(赋值字段): 建立一个拷贝字段 , 将所有的全文字段复制到一个字段中 , 以便进行统一的检索 。
篇二:Solr开发指南
Solr
全文检索技术
1. Solr介绍 15
2. Solr安装配置-SolrCore配置 15
3. Solr安装配置-Solr工程部署 10
4. Solr安装配置-Solr工程测试 15
5. Solr安装配置-多SorlCore配置 10
6. Solr入门--schema 20
7. Solr入门-安装中文分词器 15
8. Solr入门-自定义业务系统Field 20
9. Solr入门-SolrJ介绍10
10. Solr入门-SolrJ索引维护 20
11. Solr入门-数据导入处理器20
12. Solr入门-搜索语法 10
13. Solr入门-SolrJ-搜索 20
14. Solr案例-需求分析 10
15. Solr案例-架构设计 15
16. Solr案例-Service 20
17. Solr案例-Controller 20
18. Solr案例-主体调试 20
19. Solr案例-功能完善
1 【Solr介绍】
1.1 Solr是什么
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
1.2 Solr与Lucene的区别
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
1.3 Solr下载
从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage。
下载solr-4.10.3.zip并解压:
bin:solr的运行脚本
contrib:solr的一些贡献软件/插件,用于增强solr的功能。
dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。 docs:solr的API文档
example:solr工程的例子目录:
? example/solr:
该目录是一个包含了默认配置信息的Solr的Core目录。
? example/multicore:
该目录包含了在Solr的multicore中设置的多个Core目录。
? example/webapps:
该目录中包括一个solr.war,该war可作为solr的运行实例工程。
licenses:solr相关的一些许可信息
1.4 运行环境
solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器,环境如下:
Solr:Solr4.10.3
Jdk:jdk1.7.0_72
Tomcat:apache-tomcat-7.0.53
2 Solr安装配置
2.1 Solr与Tomcat整合
2.1.1 【SolrCore配置】
2.1.1.1 SolrHome与SolrCore
创建一个Solr home目录,SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件。
Solr实例即SolrCore,一个SolrHome中可以包括多个SolrCore目录,每个SolrCore对外提供单独的搜索和索引服务。
2.1.1.2 目录结构
example\solr是一个solr home目录结构,如下:
collection1:叫做一个Solr运行实例SolrCore也称为一个collection,SolrCore的名称不固定,命名方式类似collection1/collection2/collection3等,每个collection对外单独提供索引和搜索接口。
solrHome中可以创建多个solrCore即collection。
SolrCore目录内容如下所示:
说明:
(1)一个solrCore中包括一个索引目录,该目录存储了该 SolrCore的索引文件。data是SolrCore的索引文件目录 ,如果没有solr会自动创建。
(2)conf是SolrCore的配置文件目录 :里面包括两个重要的配置文件solrconfig.xml与schema.xml配置文件
2.1.1.3 创建SolrCore
创建目录F:\develop\solr
篇三:Lucene、Solr开发经验
Lucene/Solr开发经验 1、开篇语
2、概述
3、渊源
4、初识Solr
5、Solr的安装
6、Solr分词顺序
7、Solr中文应用的一个实例
8、Solr的检索运算符
[开篇语]按照惯例应该写一篇技术文章了,这次结合Lucene/Solr来分享一下开发经验。 Lucene是一个使用Java语言写的全文检索开发包(API),利用它可以实现强大的检索功能,它的详细介绍大家可以去Google上搜索一下,本文重点放在Solr相关的讨论上。
[概述]目前国内研究Solr的人不多,而且大多是因为项目开发需要。Solr师承Lucene,为Apache基金会下的一个项目,具体的说它还是Lucene下的一个子项目。Solr出身豪门,而且具有自己的技术特点,填补了以往Lucene仅仅作为开发工具包的遗憾,它是一个完完整整地应用。换句话说,它是一个全文检索服务器,它开箱即用,让我们能立马体会到Lucene的强大功能,为Lucene产品化走出了一大步。
Solr分词原理演示界面
[渊源]最初,CNET Networks使用Lucene API来开发了一些应用,并在这个基础上产生了Solr的雏形,后来Apache Software Foundation在Lucene顶级项目的支持下得到了Solr,这已经是2006年1月份的事了。2006年1月17日,Solr正是加入Apache基金会的孵化项目,在整个项目孵化期间,Solr 稳步地积累各种特性并吸引了一个稳定的user群体、developer群体和Committer群体,并于1年之后的17日正式酝酿成熟,在这之前已经成功发布了1.1.0版。目前的稳定版本是1.2,Solr在9月份的2007Apache年会上大放异彩,在今年11月底将来到香港参加2007亚洲开源软件峰会,遗憾的是为什么不来北京:-(
[初识Solr]Solr服务器不同于普通的关系型数据库,不仅仅在于它核心本质的不同(面向结构化和非结构化数据的不同),很大的不同还在于它的体系架构上。Solr服务器一般情况下需要部署于应用服务器/Java容器上(如果是本机通信不涉及RPC可以不使用Java容器,如采用嵌入方式使用Solr),无法独立工作于JVM上。
Solr架构图
Solr服务器可以存储数据并通过索引对其进行快速高效检索。对外提供HTTP/XML和Json API接口,这使得它能够在多语言环境下集成,比如针对它的客户端的开发。Solr目前的客户端面向的有Java、PHP、Python、C#、Json和Ruby等,遗憾的是没有面向C/C++(这也是本人目前在研究的),研究音乐搜索分类的Brian Whitman曾在苹果平台上使用JNI技术在C代码中嵌入Solr实现检索,不过是一个Cocoa工程。有了这些客户端,使用者能很方便地将Solr集成到具体运用中。目前最完善的当属Java客户端Solrj,以及加入到Solr trunk,并将在1.3版本中正式发布。
如果不研究开发Solr,只是使用Solr,只需要关注Solr的以下几个方面:
1、Solr服务器的配置在solrconfig.xml中完成,包括对缓存,servlet的个性化配置等等,即系统全局的配置;
2、索引方法、索引域(字段)等等在schema.xml中完成,这个配置是针对Solr实例的;
3、索引数据文件默认放在Solr文档根目录下的data/index目录下,这个路径可以通过第1点配置,同时可以将这个目录下的文件进行复制粘贴,即可完成索引的复用;
4、建立索引的时间相当长,我采用按词无字典索引方式对2G110万条中文记录进行索引,花了将近2个半小时的时间(当然这个时间和很多因素有关,有兴趣的话大家可以留言和我讨论),相对而言,在linux下建索引时间要比windows下快很多,可以使用commit操作使新增索引生效,同时注意索引的优化,索引优化也是很费资源和时间的,但是优化索引也是提高检索速度的重要方法,因此需要好好权衡这一点;
5、安装完后的Solr目录下有这么几个文件夹:bin文件夹里主要是用于建立镜像和完成远程同步的脚本;conf文件夹下主要是1、2点中提到的配置文件;admin文件夹下是的主要是提供web管理界面的文件;
6、目前Solr1.2不具备安全性设计,没有用户组及权限设置,在进行具体应用时需要注意安全,目前最有效的方法是通过应用服务器上的授权实现。
本文永久链接:/blog/?p=25
[Solr的安装]Solr发行版中已经有一个使用Jetty为servlet容器的小例子,可以使用这个例子来体验,那正在在自己想部署的平台和应用服务器上该怎么一个步骤呢?
要开始使用 Solr,需安装以下软件:
1、Java 1.5 或更高版本;
2、Ant 1.6.x 或更高版本(用于编译管理Solr工程,个人推荐,当然可以使用eclipse);
3、Web 浏览器,用来查看管理页面(官方建议使用Firefox,但实际没有发现和IE有什么差别);
4、servlet 容器,如Tomcat 5.5(不建议使用6版本)。本文以Tomcat 在 8080 端口上运行为例。如果运行的是其他 servlet 容器或在其他的端口上运行,则可能要修改代码中的
URL才能访问示例应用程序和 Solr。
下面开始安装配置:
1、使用Ant编译工程或下载示例应用程序,将Solr WAR 文件复制到 servlet 容器的webapps目录中;
2、得到Solr文件夹,以备随后将其复制到当前目录,可以使用ant build得到,也可以在下载的压缩包中找到,以它为模板以备之后的修改;
3、可以通过以下三种方式之一设置 Solr 的主位置:
设置 java 系统属性 solr.solr.home (没错,就是 solr.solr.home,一般在嵌入式集成中用得多);
配置 java:comp/env/solr/home 的一个 JNDI 查找指向 solr 目录,建立
/tomcat55/conf/Catalina/localhost/solr.xml文件,注意这个xml文件名将是Solr实例名称,2中的当前目录被指定为下面中的f:/solrhome,文件内容如下:
? <context docBase="f:/solr.war" debug="0" crossContext="true">
? <environment name="solr/home" type="java.lang.String" value="f:/solrhome" override="true" />
? </context>
在包含 solr 目录的目录中启动 servlet 容器(默认的 Solr 主目录是当前工作目录下的 solr);
4、最后一点就是如果有CJK(中日韩文字)应用,出现乱码问题,采用如下方法解决(其实已经不算是solr配置问题,而是应用服务器配置问题),修改Tomcat的conf/server.xml文件中对于端口(本文为8080)的连接器统一资源编码为UTF-8,因为Solr1.2内核支持UTF-8编码:
? <server ...>
? <service ...>
? <connector ... URIEncoding="UTF-8"/>
?...
? </service>
? </server>
[Solr分词顺序]Solr建立索引和对关键词进行查询都得对字串进行分词,在向索引库中添加全文检索类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询。分词的顺序如下:
索引
1:空格whitespaceTokenize
2:过滤词StopFilter
3:拆字WordDelimiterFilter
4:小写过滤LowerCaseFilter
5:英文相近词EnglishPorterFilter
6:去除重复词RemoveDuplicatesTokenFilter
查询
1:查询相近词
2:过滤词
3:拆字
4:小写过滤
5:英文相近词
6:去除重复词
以上是针对英文,中文的除了空格,其他都类似
[Solr中文应用的一个实例]
1、首先配置schema.xml,这个相当于数据表配置文件,它定义了加入索引的数据的数据类型的。1.2版本的schema.xml主要包括types、fields和其他的一些缺省设置。
A、首先需要在types结点内定义一个FieldType子结点,包括
name,class,positionIncrementGap等等一些参数,name就是这个FieldType的名称,class指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。在例子中text这个FieldType在定义的时候,在index的analyzer中使用solr.WhitespaceTokenizerFactory这个分词包,就是空格分词,然后使用solr.StopFilterFactory,solr.WordDelimiterFilterFactory,solr.LowerCaseFilterFactory,solr.EnglishPorterFilterFactory,solr.RemoveDuplicatesTokenFilterFactory这几个过滤器。在向索引库中添加text类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询。Solr的analysis包并没有带支持中文的包,在这里我们采用lucene里的语言包(在下载后的solr压缩包内,lib目录下有一个lucene-analyzers-2.2.0.jar包,里面含有中文处理的cn和cjk类),有cn和cjk两个类可以支持中文。我们采用cjk类,并在schema.xml中加入如下配置:
?? <fieldtype name="text_cjk" class="solr.TextField">