本文地址:

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)中使用:<uniqueKey>id</uniqueKey>进行描述。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

找到<Connector port="8080" .../>,加入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内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="/home/zhoujh/java/apache-tomcat7/webapps/solr.war" debug="0" crossContext="true" >

<Environment name="solr/home" type="java.lang.String" value="/home/zhoujh/java/apache-tomcat7/solr" override="true" />

</Context>

然后在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,把<queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" enable="${solr.velocity.enabled:true}"/>注释掉或者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" />

然后找到这一句:<defaultSearchField>text</defaultSearchField>把它改成<defaultSearchField>game_name</defaultSearchField>

在浏览器打开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设置成哪种。

solr学习笔记-linux下配置solr(转)的更多相关文章

  1. 深度学习笔记------linux下配置安装caffe-cpu only模式

    本文适合初学者学习配置caffe的最简单方法.这是我在看了网上各种大神的方法后总结的最傻瓜式的配置方法了. 本人也是在不断地配置caffe过程中受打击与成长@.@ 第一步.配置caffe所需的依赖环境 ...

  2. Solr学习笔记之3、Solr dataimport - 从SQLServer导入数据建立索引

    Solr学习笔记之3.Solr导入SQLServer数据建立索引 一.下载MSSQLServer的JDBC驱动 下载:Microsoft JDBC Driver 4.0 for SQL Server ...

  3. Solr学习笔记之4、Solr配置文件简介

    Solr学习笔记之4.Solr配置文件简介 摘自<Solr in Action>. 1. solr.xml – Defines one or more cores per Solr ser ...

  4. Java学习笔记——Linux下安装配置tomcat

    朝辞白帝彩云间,千里江陵一日还. 两岸猿声啼不住,轻舟已过万重山. ——早发白帝城 首先需要安装配置JDK,这里简单回顾下.Linux下用root身份在/opt/文件夹下创建jvm文件夹,然后使用ta ...

  5. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  6. LINUX学习笔记——LINUX下EXP命令全库备份数据库文件

    LINUX下EXP命令全库备份数据库文件 1)建立备份目录,目录操作权限授权给Oracle用户 mkdir /backup  --创建backup文件夹 cd  /   --进入cd语句 ls  -l ...

  7. Linux 程序设计学习笔记----Linux下文件类型和属性管理

    转载请注明出处:http://blog.csdn.net/suool/article/details/38318225 部分内容整理自网络,在此感谢各位大神. Linux文件类型和权限 数据表示 文件 ...

  8. Java学习笔记——Linux下安装配置MySQL

    山重水复疑无路,柳暗花明又一村 --游山西村 系统:Ubuntu 16.04LTS 1\官网下载mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz2\建立工作组:$su ...

  9. ffmpeg学习笔记-Linux下编译Android动态库

    Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...

随机推荐

  1. [mmc]Linux下MMC/SD/SDIO的识别与操作

    转自:http://blog.csdn.net/skdkjzz/article/details/38927943 我们知道host在扫描卡的过程中,其识别的顺序为SDIO  SD MMC,并且从它的注 ...

  2. 补充下.net知识

    问题1: public int getvalue(int a) { try { a = a + ; ; } catch (Exception) { throw; } finally { a = a + ...

  3. sysctl -p 重新加载文件/etc/sysctl.conf -a 所有参数 -w 临时指定

    sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下.sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎 ...

  4. PHP无限极分类 - 2 - 无限极评论

    参考上一节: 结合ZUI前端框架,制作的无限极评论列表: 项目目录: 代码: <!DOCTYPE html> <html lang="en"> <he ...

  5. solr学习2

    1:solr中的时间问题 solr中显示的时间默认会比我们本机时间少八个小时,因为时区不一样. 在solr的web页面查看会发现时间少八个小时. 但是使用java代码操作的时候是整成的的,所以在这只需 ...

  6. Spring in Action 4th 学习笔记

    约定: 一.@Xxx Class 表示被@Xxx注解的类.同理还有@Xxx注解的字段或方法. 例如:@Bean Method. 二.@Component Class 同时代指 @Controller. ...

  7. static、extern分析

    1.extern extern在变量声明中有这样一个作用:你要在demo2.cpp中引用demo1.cpp中的一个全局变量,就要在demo2.h中用extern来声明这个全局变量(或者在demo1.h ...

  8. JAVA 多线程机制(一)

    PS:又开始忙叨JAVA了..前一阵子搞定了HTML+CSS,要开始写实验室的界面了,真没劲...博客到时候再更新吧! 先更新JAVA的吧... 多线程(一) 主要内容 1.JAVA中的线程 2.用T ...

  9. FusionMap 检测融合基因

    定义:融合基因是指两个或者多个基因联合起来,一起转录形成一个转录本: 检测的意义:融合基因可以作为某些疾病的特异分子标记,比如 bcr/abl融合基因存在于95%以上的慢性粒细胞白血病患者中: AML ...

  10. 【Java集合的详细研究9】Java堆栈(stack)的使用方法

    栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈 ...