知识大全 教你使用solr搭建你的全文检索

Posted 中文

篇首语:愿你在孤独难熬的时光里,始终没有辜负那个拼命的自己。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 教你使用solr搭建你的全文检索相关的知识,希望对你有一定的参考价值。

  Solr 是一个可供企业使用的 基于 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= >

  <analyzer type= index >

  <tokenizer class= ronghao fulltextsearch analyzer 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 />

  </analyzer>

  <analyzer type= query >

  <tokenizer class= ronghao fulltextsearch analyzer 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 />

  </analyzer>

  </fieldtype>

  完成后重启tomcat 即可在

  体验到庖丁的中文分词 注意要将paoding analysis 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 ) + + ;

cha138/Article/program/Java/hx/201311/25984

相关参考

知识大全 全文检索你的领域模型

HibernateSearch:全文检索你的领域模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 教你优化你的ASP程序

教你优化你的ASP程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/Art

《给你》歌词全文(刘若英)

刘若英的《给你》歌词全文,刘若英的歌曲《给你》属于专辑《我很好》,发行于2008年1月11日。歌词全文如下:你的咖啡只加半块糖雨天不喜欢带伞散步时喜欢歌唱别和你说太多话你的习惯她知道吗你的美好她发现了

知识大全 实习期间该怎样学习别人不主动教你的东西

实习期间该怎样学习别人不主动教你的东西?我想方法很多,就看你有没有用心去想,去做。我提供几个建议,希望对你能有所帮助!第一,明确定位和自己的价值观。虽然有点大,但是很现实。人家不想把你教会了,你人就跳

知识大全 上司霸权,不愿意下放,又摆着一副,我很愿意教你的样子,我该怎么办

上司霸权,不愿意下放,又摆着一副,我很愿意教你的样子,我该怎么办?1,给他唠叨的机会,听听他的高见2,如果他真的是胸无点墨,你可以在他说完后说出你的观点,比如说,恩,对,您觉得某某处是不是需要再稍微加

《关机又关机》歌词全文

《关机又关机》,是由YangYang作词作曲并演唱的歌曲,发布于2021年1月13日。歌词全文如下:你一直在我身边哪怕我一无所有你说只要我爱你你就别无所求看着你的照片我的悲伤以为学会伪装就不会受伤还是

知识大全 教你如何查找存储记录

SQLServer:教你如何查找存储记录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你的TS

刘大壮《我很好》(吉他版)歌词全文

刘大壮《我很好》(吉他版)歌词全文,刘家泽、晨晨晨作词;晨晨晨作曲,刘大壮吉他。不错的歌。还记得属于你的那些嗜好喜欢吃的菜系和饮料习惯的动作连带着微笑在最远的星空闪耀还记得爱你时的每个心跳还保留着每一

知识大全 教你如何有效面试

要得到任何一个职位,必须经过面试这一关,短短几十分钟的面试也许就决定着你的职业生涯,当你接到企业的面试通知电话后,应该做什么呢?接到面试通知电话时一定要问清楚应征的公司名称、职位、面试地点(包括乘车或

刘大壮新歌《三号线》歌词全文

刘大壮在抖音上发布了自己的新歌《三号线》,吴剑中作词,彭扬作曲,歌词全文如下:乘坐地铁三号线往返的两点一线隔着泪割舍从前再听不见敷衍呵口气勾圈玻璃窗上映你的侧脸结局失散同谁出演我像过客般擦肩用煽情字眼