zoukankan      html  css  js  c++  java
  • solr学习笔记linux下配置solr

    首先介绍一下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编辑器自己生成的。

     1 <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">
     2         <analyzer type="index">
     3             <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" /> 
     4             <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
     5             <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />                
     6             <filter class="solr.LowerCaseFilterFactory" />  
     7             <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />      
     8             <filter class="solr.RemoveDuplicatesTokenFilterFactory" />  
     9         </analyzer>
    10         <analyzer type="query">
    11             <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" />  
    12             <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />  
    13             <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />  
    14             <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />  
    15             <filter class="solr.LowerCaseFilterFactory" />  
    16             <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />  
    17             <filter class="solr.RemoveDuplicatesTokenFilterFactory" />  
    18         </analyzer>
    19     </fieldType></span></span></span>

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

    1 <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

     1 <fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100">
     2         <analyzer>
     3             <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="/home/zhoujh/java/apache-tomcat7/solr/dict">
     4             </tokenizer>
     5         </analyzer>
     6     </fieldtype>
     7     <fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100">
     8         <analyzer>
     9             <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="/home/zhoujh/java/apache-tomcat7/solr/dict">
    10             </tokenizer>
    11         </analyzer>
    12     </fieldtype>
    13     <fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100">
    14         <analyzer>
    15             <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="/home/zhoujh/java/apache-tomcat7/solr/dict">
    16             </tokenizer>
    17         </analyzer>
    18     </fieldtype>

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

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

    1 <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设置成哪种。

  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/SuperBing/p/2882827.html
Copyright © 2011-2022 走看看