教你使用solr搭建你的全文检索
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教你使用solr搭建你的全文检索相关的知识,希望对你有一定的参考价值。
参考技术ASolr 是一个可供企业使用的 基于 Lucene 的开箱即用的搜索服务器 对Lucene不熟?那么建议先看看下面两篇文档
实战Lucene 第 部分 初识 Lucene lo lucene /
用Lucene加速Web搜索应用程序的开发 lucene /
一 solr介绍
solr是基于Lucene Java搜索库的企业级全文搜索引擎 目前是apache的一个项目 它的官方网址在 solr需要运行在一个servlet 容器里 例如tomcat solr在lucene的上层提供了一个基于HTTP/XML的Web Services 我们的应用需要通过这个服务与solr进行交互
二 solr安装和配置
关于solr的安装和配置 这里也有两篇非常好的文档 作者同时也是 Lucene Java 项目的提交人和发言人
使用Apache Solr实现更加灵巧的搜索 solr /l
solr /l
下面主要说说需要注意的地方
Solr的安装非常简单 下载solr的zip包后解压缩将dist目录下的war文件改名为solr war直接复制到tomcat 的webapps目录即可 注意一定要设置solr的主位置 有三种方法 我采用的是在tomcat里配置java p/env/solr/home的一个JNDI指向solr的主目录(example目录下) 建立/tomcat /conf/Catalina/localhost/solr xml文件
<Context docBase= D:/solr war debug= crossContext= true ><Environment name= solr/home type= java lang String value= D:/solr/solr override= true /></Context>
观察这个指定的solr主位置 里面存在两个文件夹 conf和data 其中conf里存放了对solr而言最为重要的两个配置文件schema xml和solrconfig xml data则用于存放索引文件
schema xml主要包括types fields和其他的一些缺省设置
solrconfig xml用来配置Solr的一些系统属性 例如与索引和查询处理有关的一些常见的配置选项 以及缓存 扩展等等
上面的文档对这两个文件有比较详细的说明 非常容易上手 注意到schema xml里有一个
<uniqueKey>url</uniqueKey>
的配置 这里将url字段作为索引文档的唯一标识符 非常重要
三 加入中文分词
对全文检索而言 中文分词非常的重要 这里采用了qieqie庖丁分词(非常不错 )) 集成非常的容易 我下载的是 alpha 版本 其中它支持最多切分和按最大切分 创建自己的一个中文TokenizerFactory继承自solr的BaseTokenizerFactory
/** * Created by IntelliJ IDEA * User: ronghao * Date: * Time: : : * 中文切词 对庖丁切词的封装 */ public class ChineseTokenizerFactory extends BaseTokenizerFactory /** * 最多切分 默认模式 */ public static final String MOST_WORDS_MODE = most words ; /** * 按最大切分 */ public static final String MAX_WORD_LENGTH_MODE = max word length ; private String mode = null; public void setMode(String mode) if (mode==null||MOST_WORDS_MODE equalsIgnoreCase(mode) || default equalsIgnoreCase(mode)) this mode=MOST_WORDS_MODE; else if (MAX_WORD_LENGTH_MODE equalsIgnoreCase(mode)) this mode=MAX_WORD_LENGTH_MODE; else throw new IllegalArgumentException( 不合法的分析器Mode 参数设置: + mode); @Override public void init(Map args) super init(args); setMode(args get( mode )); public TokenStream create(Reader input) return new PaodingTokenizer(input PaodingMaker make() createTokenCollector()); private TokenCollector createTokenCollector() if( MOST_WORDS_MODE equals(mode)) return new MostWordsTokenCollector(); if( MAX_WORD_LENGTH_MODE equals(mode)) return new MaxWordLengthTokenCollector(); throw new Error( never happened );
在schema xml的字段text配置里加入该分词器
<fieldtype name= text class= solr TextField positionIncrementGap= >
< *** yzer type= index >
<tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words /> <filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />
<filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />
<filter class= solr LowerCaseFilterFactory />
<filter class= solr RemoveDuplicatesTokenFilterFactory />
</ *** yzer>
< *** yzer type= query >
<tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words />
<filter class= solr SynonymFilterFactory synonyms= synonyms txt ignoreCase= true expand= true />
<filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />
<filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />
<filter class= solr LowerCaseFilterFactory />
<filter class= solr RemoveDuplicatesTokenFilterFactory />
</ *** yzer>
</fieldtype>
完成后重启tomcat 即可在
体验到庖丁的中文分词 注意要将paoding *** ysis jar复制到solr的lib下 注意修改jar包里字典的home
四 与自己应用进行集成
Solr安装完毕 现在可以将自己的应用与solr集成 其实过程非常的简单 应用增加数据——>根据配置的字段构建add的xml文档——>post至solr/update
应用删除数据à根据配置的索引文档唯一标识符构建delete的xml文档——>post至solr/update
检索数据à构建查询xml—>get至/solr/select/——>对solr返回的xml进行处理——>页面展现
具体的xml格式可以在solr网站找到 另外就是solr支持高亮显示 非常方便
关于中文 solr内核支持UTF 编码 所以在tomcat里的server xml需要进行配置
<Connector port= maxHttpHeaderSize= URIEncoding= UTF …/>
另外 向solr Post请求的时候需要转为utf 编码 对solr 返回的查询结果也需要进行一次utf 的转码 检索数据时对查询的关键字也需要转码 然后用 + 连接
String[] array = StringUtils split(query null ); for (String str : array) result = result + URLEncoder encode(str UTF ) + + ;
lishixinzhi/Article/program/Java/hx/201311/25984
入坑系列----solr环境搭建
什么是Solr?
Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器。
Solr和Lucene的区别?
Lucene是一个全文检索引擎工具包,它只是一个jar包,不能独立运行,对外提供服务。
Solr是一个全文检索服务器,它可以单独运行在servlet容器,可以单独对外提供搜索和索引功能。Solr比lucene在开发全文检索功能时,更快捷、更方便。
下载solr
Solr和Lucene的版本是同步更新的,最新的版本是7.0.0,本次演示用的是solr-6.5.0,解压后如图
搭建Solr环境
运行环境
JDK:1.8
Solr:6.5.0
Tomcat :8.5.14
1)把 D:\\StudySoftware\\StudySoftware\\solr-6.5.0\\server\\solr-webapp下的 webapp 文件夹拷贝到tomcat 的webapps下,重命名为solr,也可以是其他名字。
注意:此处有的教程错误的将solr-webapp文件夹进行拷贝,这会导致solr启动不了。
2)拷贝D:\\StudySoftware\\StudySoftware\\solr-6.5.0\\server\\lib\\ext下的jar包到 D:\\StudySoftware\\apache-tomcat-8.5.14\\webapps\\ 下solr 项目的WEB-INF\\lib下。
3)拷贝D:\\StudySoftware\\StudySoftware\\solr-6.5.0\\server\\lib下的metrics开头的5个jar到 D:\\StudySoftware\\apache-tomcat-8.5.14下的webapps\\solr\\WEB-INF\\lib路径下。
4)拷贝D:\\StudySoftware\\StudySoftware\\solr-6.5.0\\server 下的solr文件夹到E盘或其它非中文目录下,重命名为solrhome。
5)修改D:\\StudySoftware\\apache-tomcat-8.5.14\\webapps\\ solr(solr的项目名)\\WEB-INF\\web.xml, 找到如下代码,去掉注释,/put/your/solr/home/here 改为你自己的solrhome的路径, 我的是D:\\StudySoftware\\solrhome
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:\\StudySoftware\\solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
注释权限,不然访问solr会出现没有授权的错误。
<!--
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>
-->
6)拷贝D:\\StudySoftware\\StudySoftware\\solr-6.5.0\\server\\resources下的log4j.properties到D:\\StudySoftware\\apache-tomcat-
8.5.14\\webapps\\solr\\WEB-INF\\classes,如果WEB-INF下没有classes文件那么就创建一个classes文件夹。
7)启动tomcat, 输入http://localhost:8080/solr/index.html 看到如下界面。
本文为博主原创文章,未经博主允许不得转载。转载请注明出处:http://blog.csdn.net/wenteryan
以上是关于教你使用solr搭建你的全文检索的主要内容,如果未能解决你的问题,请参考以下文章