当前位置:文档之家› solr使用手册

solr使用手册

Solr全文检索服务一、企业站内搜索技术选型⏹在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。

1.使用Lucene实现?什么是Lucene ?⏹Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。

Lucene目前是Apache Jakarta(雅加达) 家族中的一个开源项目。

也是目前最为流行的基于Java开源全文检索工具包。

目前已经有很多应用程序的搜索功能是基于Lucene ,比如Eclipse 帮助系统的搜索功能。

Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索●单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。

2.使用Google或Baidu接口?●通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统依赖紧密,不方便扩展,不建议采用。

3.使用Solr实现? 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的配置和运行情况。

●基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。

●Solr的特点:1.基于标准的开放接口:Solr搜索服务器支持通过XML、JSON和HTTP查询和获取结果。

2.易管理:Solr可以通过HTML页面管理,Solr配置通过XML完成。

3.可伸缩性:能够有效地复制到另外一个Solr搜索服务器。

4.灵活的插件体系:新功能能够以插件的形式方便的添加到Solr服务器上。

5.强大的数据导入功能:数据库和其他结构化数据源现在都可以导入、映射和转化。

⏹Solr 与Lucene的架构图⏹Solr与 Lucene的区别1. Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的。

2. Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。

Lucene本质上是搜索库,不是独立的应用程序,而Solr是。

Lucene专注于搜索底层的建设,而Solr专注于企业应用。

Lucene不负责支撑搜索服务所必须的管理,而Solr负责。

所以说,一句话概括Solr是Lucene面向企业搜索应用的扩展。

二、Solr的安装配置下载solr的解压包并解压/solr/此教程使用的是solr5.0bin:solr的运行脚本contrib:solr的软件/插件,用于增强solr的功能。

dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。

docs:solr的API文档example:solr工程的例子目录:example/solr:该目录是一个包含了默认配置信息的Solr的Core目录。

example/multicore:该目录包含了在Solr的multicore中设置的多个Core目录。

licenses:solr相关的一些许可信息server:solr的服务配置信息以及solr的实例项目。

⏹运行环境1.solr 需要运行在一个Servlet容器中,Solr5.0要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器,环境如下●Solr : solr5.0●Jdk :jdk1.7.0_72●Tomcat:apache-tomcat-7.0.53⏹Solr与tomcat整合加载solr在启动时依赖jar(jar包就在contrib与dist文件夹中)1.SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore,一个SolrHome可以包括多个SolrCore (Solr实例),每个SolrCore提供单独的搜索和索引服务。

说明:Cmfz_solr:叫做一个Solr运行实例SolrCore,SolrCore名称不固定,一个solr 运行实例对外单独提供索引和搜索接口。

solrHome中可以创建多个solr运行实例SolrCore。

一个solr的运行实例对应一个索引目录。

conf是SolrCore的配置文件目录。

data目录存放索引文件需要创建。

◆手动创建solr实例(cmfz_solr)◆Solrconfig.xml,在cmfz_solr的conf目录下,它是SolrCore运行的配置文件solr工程部署1. 拷贝jar包2. 拷贝日志配置文件3. 修改tomcat webapps下的webapp\solr\WEB-INF\web.xml文件a) 配置solrhome启动tomcat,访问http:localhost:9999/solr 进入solr管理页面Solr core 介绍1.Analysis(重点)2.Dataimporta)可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。

3.Document(重点)a)通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。

/delete 表示删除索引4.Query(重点)通过/select执行搜索索引,必须指定“q”查询条件方可搜索。

三、Solr的索引⏹Scheam.xml1.schema.xml,在SolrCore的conf目录下,它是Solr数据表配置文件,它定义了加入索引的数据的数据类型的。

主要包括FieldTypes、Fields和其他的一些缺省设置。

⏹FieldType域类型定义1.下边“text_general”是Solr默认提供的FieldType,通过它说明FieldType定义的内容:FieldType子结点包括:name,class,positionIncrementGap等一些参数:Name: 是FieldType的名字Class:是Solr提供的包solr.TextField,solr.TextField 允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer)和多个过滤器(filter)positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误,此值相当于Lucene的短语查询设置slop值,根据经验设置为100。

在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤搜索分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,这里还用到了solr.SynonymFilterFactory同义词过滤器。

2.Field定义在fields结点内定义具体的Field,filed定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否存储多个值)等属性。

如下:<field name="name" type="text_general" indexed="true" stored="true"/><field name="features" type="text_general" indexed="true" stored="true" mu ltiValued="true"/>multiValued:该Field如果要存储多个值时设置为true,solr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图),通过使用solr查询要看出返回给客户端是数组。

a)uniqueKey:Solr中默认定义唯一主键key为id域,如下:Solr在删除、更新索引时使用id域进行判断,也可以自定义唯一主键。

注意在创建索引时必须指定唯一约束。

b)copyField复制域:copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检索:比如,输入关键字搜索title标题内容content,定义title、content、text 的域:根据关键字只搜索text域的内容就相当于搜索title和content,将title和content复制到text中,如下:(注意:该field的mutiValued 必须为true)c)dynamicField(动态字段)动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:name_i,gender_i,school_i等。

···⏹创建索引1.通过solr的管理页面操作⏹搜索索引1.通过solr的管理页面操作索引维护使用/update进行索引维护,进入Solr管理界面SolrCore下的Document下:⏹删除索引四、Analyzer 中文分词器⏹安装中文分词器1.下载ik相关jarsolr-analyzer-extra-5.1.0.jar注意:ext.dic和stopword.dic必须保存成无BOM的utf-8类型。

相关主题