全文检索技术solr(简单介绍)

这篇博客写着写着突然发现并不好写,solr应该结合项目来写才能易于理解,而项目又不好放在这篇博客里,因此我也就简单的介绍一下.

solr的概述

对于绝大多数的项目都离不开搜索的功能,问题是搜索功能往往是巨大的资源消耗并且它们沉重的数据库加载而拖垮应用的性能,Apache Solr 就可以解决以上的问题,Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置,可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎.

solr的工作原理

solr的工作方式是文档通过Http利用XML 加到一个搜索集合中,查询该集合也是通过http收到一个XML/JSON响应来实现.它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等.总结一句话就是用户可以通过http请求向搜索引擎服务器提交一定格式的xml文件生成索引,也可以通过http get操作提出查询的请求得到xml/json格式的返回结果.

solr的安装

solr需要部署到服务器上,假设部署到Tomcat上,首先把solr 下的 dist 目录 solr-4.10.3.war 复制到 Tomcat\webapps 下(为了方便访问可以去掉版本号),然后启动Tomcat后自动解压war包,再把solr下example/lib/ext 目录下的所有的 jar 包,添加到 solr 的工程中(\WEB-INF\lib目录下).然后再创建一个 solrhome ,solr 下的/example/solr 目录就是一个 solrhome(创建solrhome位置可以直接放在根目录下).关联 solr 及 solrhome,需要修改 solr 工程的 web.xml 文件,标签的属性值指定solrhome的位置.最后启动Tomcat,访问solr.

中文分析器 IK Analyzer

因为我们中文的特殊性,所以分词可以使用这个分词器,IK Analyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包.
它的使用配置如下:
1、把 IKAnalyzer2012FF_u1.jar 添加到 solr 工程的 lib 目录下
2、创建 WEB-INF/classes 文件夹 把扩展词典、停用词词典、配置文件放到 solr 工程的 WEB-INF/classes 目录下
3、修改 Solrhome 的 schema.xml 文件,配置一个 FieldType,使用 IKAnalyzer



配置域:
域相当于数据库的表字段,用户存放数据,因此用户根据业务需要去定义相关的 Field(域),一般来说,每一种对应着一种数据,用户对同一种数据进行相同的操作.
域的常用属性:
name:指定域的名称
type:指定域的类型
indexed:是否索引
stored:是否存储
required:是否必须
multiValued:是否多值
然后还有一些复制域(将某一个 Field 中的数据复制到另一个域中),动态域(我们需要动态扩充字段时,我们需要使用动态域)等.

Spring Data Solr 简介

在实际项目中我们一般使用的是spring框架,然后solr也可以集成到spring中,就是使用spring data solr.
使用步骤:第一步是引入jar包依赖;
然后创建配置文件,主要内容如下:

<!--url应根据自己实际项目的地址填写-->
<solr:solr-server id="solrServer" url="http://localhost:8080/solr" />
<!-- solr 模板,使用 solr 模板可对索引库进行 CRUD 的操作 -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg ref="solrServer" />
</bean>

我们项目中的实体类属性使用@Field 注解标识 ,如果属性与配置文件定义的域名称不一致,需要在注解中指定域名称.
当依赖注入solrTemplate的bean对象后就能执行CRUD操作了.

以上就是solr的基本简介,在实际的项目中使用solr是非常复杂的,因为本人能力有限再加上条件限制只能写到这个地步,如果想要学习更多请自行查阅资料.

猜你喜欢

转载自blog.csdn.net/keyto1/article/details/88959562