搜档网
当前位置:搜档网 › solr使用手册

solr使用手册

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的解压包并解压

https://www.sodocs.net/doc/311236840.html,/solr/

此教程使用的是solr5.0

bin: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.Dataimport

a)可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。

3.Document(重点)

a)通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:

/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。

/delete 表示删除索引

4.Query(重点)

通过/select执行搜索索引,必须指定“q”查询条件方可搜索。

三、Solr的索引

?Scheam.xml

1.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(是否存储多个值)等属性。

如下:

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相关jar

solr-analyzer-extra-5.1.0.jar

注意:ext.dic和stopword.dic必须保存成无BOM的utf-8类型。

2.修改schema.xml文件配置

3.测试

如果不使用solr默认的分词,可以自定义一套符合业务的field,指定自定义的

FieldType

五、dataimport-handler(数据引入)

?导入相关jar

?加入相关配置

1.手动创建data-config.xml

参数说明:

DataSource:数据源

必须有一个id域,这里使用Solr默认的id域,域值是从关系数据库查询的id列值。

Field中的column对应表中的列,相对来说name对应着schema.xml中的field 配置完成之后重启tomcat

测试:

六、Solr的搜索

?requestHandler

1.Solr的所有操作都是基于HTTP接口,以下是对接口请求的相关配置

explicit 10

t>

json

text

?查询语法

通过/select搜索索引,Solr制定一些参数完成不同需求的搜索

1.q –查询字符串,必须填写,如果查询所有*:* 例如id:1

2.fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询

符合的,例如:

也可以在q 查询条件中使用例如

也可以使用“*”表示无限,

例如: 20以上:age:[20 TO *] 20以下:age:[* TO 20] 3.sort 排序

相关主题