热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solr学习笔记-linux下配置solr(转)

本文地址:http:zhoujianghai.iteye.comblog1540176首先介绍一下solr:ApacheSolr(读音:SOLer)是一个开源、

本文地址:

 

http://zhoujianghai.iteye.com/blog/1540176

 

首先介绍一下solr:

Apache Solr (读音: SOLer) 是一个开源、高性能、采用Java开发、基于Lucene的全文搜索服务器,文档通过Http利用XML加到一个搜索集合中,查询该集合也是通过 http收到一个XML/JSON响应来实现。Solr 中存储的资源是以 Document 为对象进行存储的。每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性。Solr 中的每个 Document 需要有能唯一标识其自身的属性,默认情况下这个属性的名字是 id,在 Schema 配置文件(schema.xml)中使用:id进行描述。solr有两个核心文件,solrconfig.xml和schema.xml。solrconfig.xml是solr的基础文件,里面配置了各种web请求处理器、请求响应处理器、日志、缓存等;schema.xml配置映射了各种数据类型的索引方案,分词器的配置、索引文档中包含的字段也在此配置。

工作中主要用来分词和搜索,简单的工作原理是:利用分词器对数据源进行分词处理,然后根据分词结果建立索引库;查询的时候,利用分词器对查询语句进行分词,根据查询语句分词的结果在索引库中进行匹配,最后返回结果。

 

废话少说,下面开始solr之旅吧:

一.安装JDK和Tomcat

(1):安装jdk  下载jdk安装包,解压到jdk-1.x目录

(2):安装tomcat,下载tomcat安装包,解压到apache-tomcat目录下

修改tomcat安装目录下的conf目录的server.xml

找到,加入URIEncoding="UTF-8",为了支持中文。

设置Java和tomcat环境变量

 

上面两步比较简单,这里就只简单描述一下,不明白的可以网上查资料。

 

二. 安装solr

下载solr包,http://labs.renren.com/apache-mirror/lucene/solr/3.5.0/apache-solr-3.5.0.zip

 

解压缩到apache-solr目录,把apache-solr/dist目录下的apache-solr-3.5.0.war 复制到$TOMCAT_HOME/webapps目录下,重命名为solr.war

复制apache-solr/example/solr到tomcat根目录下(如果你想配置多core(实例),就复制apache-solr /example/multicore到tomcat根目录下,不用复制solr了),作为solr/home,以后也可以往该目录添加 core,每个core下面都可以有自己的配置文件。

在apache-tomcat/conf/Catalina/localhost/下创建solr.xml(跟webapps下的solr项目同名),指定solr.war和solr/home的位置,让tomcat启动时就自动加载该应用。

solr.xml内容如下:

   

然后在tomcat的bin目录下执行./startup.sh,启动tomcat

在地址栏访问http://localhost:8080/solr/

将会出现solr欢迎界面和admin入口

 

注:如果出现org.apache.solr.common.SolrException: Error loading class 'solr.VelocityResponseWriter' 异常,最简单的解决方法:找到$TOMCAT_HOME/solr/conf/solrconfig.xml,把注释掉或者enable:false即可。如果一切顺利的话,现在可以看到solr的web管理界面了。不过要想实现分词的功能,得安装一个中文分词器,这里推荐IKAnalyzer或mmseg4j。

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包,采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力,采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。优化的词典存储,更小的内存占用。支持用户词典扩展定。

mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。

三. 配置中文分词器

下面分别安装这两个中文分词器,当然选择安装其中一个也是可以的。

(1)安装IKAnalyzer

下载地址: http://code.google.com/p/ik-analyzer/downloads/list

在当前目录下新建IKAnalyzer目录,解压到该目录下:unzip IKAnalyzer2012_u5.zip -d ./IKAnalyzer

把IKAnalyzer目录下的IKAnalyzer2012.jar文件拷贝到 $TOMCAT_HOME/webapps/solr/WEB-INF/lib/下

配置schema.xml,编辑$TOMCAT_HOME/solr/conf/schema.xml,在文件中添加下面这个fieldtype

注:下面的代码中多了很多“<span style="font-size: x-small;">”标签,这个是设置字体时iteye编辑器自己生成的。

< span  style ="font-size: x-small;" >< span  style ="font-size: x-small;" >< span  style ="font-size: small;" >< fieldType  name ="text"  class ="solr.TextField"  positionIncrementGap ="100" >
         < analyzer  type ="index" >
             < tokenizer  class  = "org.wltea.analyzer.solr.IKTokenizerFactory"  isMaxWordLength ="false"   /> 
             < filter  class ="solr.StopFilterFactory"  ignoreCase ="true"  words ="stopwords.txt"  enablePositionIncrements ="true"   />  
             < filter  class ="solr.WordDelimiterFilterFactory"  generateWordParts ="1"  generateNumberParts ="1"  catenateWords ="1"  catenateNumbers ="1"  catenateAll ="0"  splitOnCaseChange ="1"   />                
             < filter  class ="solr.LowerCaseFilterFactory"   />  
             < filter  class ="solr.EnglishPorterFilterFactory"  protected ="protwords.txt"   />      
             < filter  class ="solr.RemoveDuplicatesTokenFilterFactory"   />  
         analyzer >
         < analyzer  type ="query" >
             < tokenizer  class  = "org.wltea.analyzer.solr.IKTokenizerFactory"  isMaxWordLength ="true"   />  
             < 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 ="1"  generateNumberParts ="1"  catenateWords ="0"  catenateNumbers ="0"  catenateAll ="0"  splitOnCaseChange ="1"   />  
             < filter  class ="solr.LowerCaseFilterFactory"   />  
             < filter  class ="solr.EnglishPorterFilterFactory"  protected ="protwords.txt"   />  
             < filter  class ="solr.RemoveDuplicatesTokenFilterFactory"   />  
         analyzer >
     fieldType > span > span > span >

 

添加一个索引字段field,并应用上面配置的fieldtype

 

< field  name ="game_name"  type ="text"  indexed ="true"  stored ="true"  required ="true"   />

 

然后找到这一句:text把它改成game_name

在浏览器打开http://localhost:8080/solr/admin/analysis.jsp,就可以进行分词处理了。

IKAnalyzer添加自定义分词词典:词典文件格式为无BOM的UTF-8编码的文本文件,文件扩展名不限,一次可以添加多个词库,每个词库以";"分开。把IKAnalyzer 目录下的IKAnalyzer.cfg.xml和stopword.dic拷贝到$TOMCAT_HOME/webapps/solr/WEB_INF /classes目录下,可以自己新建一个mydic.dic文件,然后在IKAnalyzer.cfg.xml里进行配置。

(2)安装mmseg4j

 下载地址:http://code.google.com/p/mmseg4j/downloads/list

在当前目录下新建mmseg4j目录,解压到该目录下:unzip mmseg4j-1.8.5.zip -d ./mmseg4j

把mmseg4j目录下的mmseg4j-all-1.8.5.jar文件拷贝到 $TOMCAT_HOME/webapps/solr/WEB-INF/lib/下

 

配置schema.xml,编辑$TOMCAT_HOME/solr/conf/schema.xml,在文件中添加下面这个fieldtype

 

 

< fieldtype  name ="textComplex"  class ="solr.TextField"  positionIncrementGap ="100" >
         < analyzer >
             < tokenizer  class ="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"  mode ="complex"  dicPath ="/home/zhoujh/java/apache-tomcat7/solr/dict" >
             tokenizer >
         analyzer >
     fieldtype >
     < fieldtype  name ="textMaxWord"  class ="solr.TextField"  positionIncrementGap ="100" >
         < analyzer >
             < tokenizer  class ="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"  mode ="max-word"  dicPath ="/home/zhoujh/java/apache-tomcat7/solr/dict" >
             tokenizer >
         analyzer >
     fieldtype >
     < fieldtype  name ="textSimple"  class ="solr.TextField"  positionIncrementGap ="100" >
         < analyzer >
             < tokenizer  class ="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"  mode ="simple"  dicPath ="/home/zhoujh/java/apache-tomcat7/solr/dict" >
             tokenizer >
         analyzer >
     fieldtype >

注意:dicPath的值改成你自己机器上相应的目录。

然后修改之前添加的filed,让其使用mmseg4j分词器

 

< field  name ="game_name"  type ="textComplex"  indexed ="true"  stored ="true"  required ="true"   />

 

配置mmseg4j分词词典:MMSEG4J的词库是可以动态加载的,词库的编码必须是UTF-8,mmseg4j 默认从当前目录下的 data 目录读取上面的文件,当然也可以指定别的目录,比如我就放在自定义的dict目录下。自定义词库文件名必需是 "words" 为前缀和 ".dic" 为后缀。如:/data/words-my.dic。

这里直接把mmseg4j/data目录下的所有.dic文件拷贝到$TOMCAT_HOME/solr/dict目录下。共有:4个dic文件,chars.dic、units.dic、 words.dic、 words-my.dic。下面简单解释一下这几个文件的作用。

1、chars.dic,是单个字,和对应的频率,一行一对,字在全面,频率在后面,中间用空格分开。这个文件的信息是 complex 模式要用到的。在最后一条过虑规则中使用了频率信息。

2、units.dic,是单位的字,如:分、秒、年。

3、words.dic,是核心的词库文件,一行一条,不需要其它任何数据(如词长)。

4、words-my.dic,是自定义词库文件

在浏览器打开http://localhost:8080/solr/admin/analysis.jsp,就可以看到分词效果了。

现在,这两种分词方法都已配置好了,想用哪种就把查询的filed的type设置成哪种。


推荐阅读
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • Linux系统中默认安装目录有哪些?Tomcat在Linux下的默认安装路径是什么?
    在Linux系统中,默认安装目录通常包括 `/usr`, `/opt`, 和 `/var` 等。对于Tomcat而言,在Linux下的默认安装路径通常是 `/opt/tomcat` 或者 `/usr/local/tomcat`。具体路径可能会因不同的发行版和配置而有所差异。例如,在Ubuntu Server中,Tomcat的默认安装路径通常是 `/opt/tomcat`。这些目录的选择旨在确保系统的整洁性和可维护性。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
author-avatar
开拓者企业管理培训
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有