solr手册

Solr部署及开发 
一、部署 
1 环境要求 
JDK 1.6及以上版本,Tomcat 6及以上,Solr发布版本4.X。如果使用较低版本,请查看Solr版本支持的JDK版本。 
2 安装步骤 
首先安装JDK 1.7和Tomcat 7,配置好环境变量,并下载最新版Solr,目前版本为4.6.0。如有必要可手动修改Tomcat端口号。为了支持中文,需要修改tomcat中conf目录下的server.xml文件,在connector 节点中添加字符编码属性URIEncoding,如下: 
<Connector port="8086" protocol="HTTP/1.1"  
connectionTimeout="20000" URIEncoding="UTF-8"redirectPort="8443" />  运行在jetty服务器 
Solr可以运行在自带的jetty服务器,可按如下步骤运行起来: 1、 解压solr-4.6.0.zip到你想到存放的路径,比如:d:/solr 2、 cmd打开命令行窗口,进入d:/solr/example目录 3、 执行命令:java -jar start.jar 
4、 通过第三步以后,系统会启动solr自带的jetty服务器,通过
http://localhost:8983/solr/便可访问solr。 此时,solr已成功启动。  
 运行在Tomcat服务器 
1、 solr.4.6.0.zip解压到指定的目录中,如d:/solr-4.6.0。 
2、 将d:/solr-4.6.0/example/webapps下的solr.war拷贝到tomcat–>weapps中。 3、 新建文件夹d:/sorl_home,将d:/solr-4.6.0/example/solr目录拷贝至d:/sorl_home中,
如果要配置为多核应用,可以将solr-4.6.0\example下的multicore拷贝到d:/sorl_home中,这样就会有就会有core0和core1两个应用。多核应用的配置与单核类似,此处示例单核应用。 4、 启动tomcat,此时tomcat会把solr.war进行解压,生成一个solr文件夹;停止tomcat,
删除solr.war。 
5、 用编辑器打开tomcat下面的weapps/solr/WEB-INF/web.xml,找到下面的代码: 
<!-- 
<env-entry> 
<env-entry-name>solr/home</env-entry-name> 
<env-entry-value>/put/your/solr/home/here</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> 
--> 
























打开注释,修改成 <env-entry> 
<env-entry-name>solr/home</env-entry-name> 
<env-entry-value>D:/solr_home/solr</env-entry-value><!--此处为solr home的地址,在第三步中我们放置到D:/solr_home/solr,如果配置为相对路径,则要注意当前目录是在Tomcat的bin目录下--> 
<env-entry-type>java.lang.String</env-entry-type> </env-entry> 
6、 将solr-4.6.0\example\lib\ext中的jar包copy到tomcat的lib中,再将
solr-4.6.0\example\resources中的log4j.properties也放到tomcat/lib中,启动tomcat,访问:http://localhost:8080/solr,应该可以成功访问到solr界面。 
二、管理端的使用 
1 基本配置 
1.1 配置solrconfig.xml 
在SolrHome\solr\collection1\conf的solrconfig.xml文件中,将<lib>节点中相关包的路径配置正确,可以将解压包中contrib和dist文件拷贝到Tomcat下solr项目里面,然后配置成相对路径或者绝对路径即可,如果是相对路径,需要注意当前目录是在collection1下,即solrconfig.xml的祖父目录。 
1.2 配置schema.xml 
schema.xml配置文件是用于定义index索引库的结构,有点类似于数据表的定义。 1、field–类似于数据表的字段 <fields> 
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" omitNorms="true"  default="df"/>    .....//省略 
<field name="_version_" type="long" indexed="true" stored="true"/><!--此字段最好不要删除!非要删除,请把solrconfig.xml中的updateLog注释,但不建议这样--> </fields> 属性介绍: (1)、name:字段名称 (2)、type:字段类型(此处type不是java类型,而是下面定义的fieldType) (3)、indexed:是否索引?true--solr会对这个字段进行索引,只有经过索引的字段才能被搜索、排序等;false--不索引 (4)、stored:是否存储?true--存储,当我们需要在页面显示此字段时,应设为true,否则false。 (5)、required:是否必须?true--此字段为必需,如果此字段的内容为空,会报异常;false--不是必需 (6)、multiValued:此字段是否可以保存多个值? (7)、omitNorms:是否对此字段进行解析?有时候我们想通过某个字段的完全匹配来


















查询信息,那么设置 indexed="true"、omitNorms="true"。 (8)、default:设置默认值 2、fieldType–字段类型 <types> 
<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 
.....//省略 
<fieldType name="text_general" positionIncrementGap="100"> <analyzer type="index"> <tokenizer/> 
<filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter/> </analyzer> 
<analyzer type="query"> <tokenizer/> 
<filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter/> </analyzer> </fieldType> </types> 
属性说明: (1)、name:类型名称,<field>中的type引用的就是这个name (2)、class:solr自定义的类型 (3)、<analyzer type="index">定义建立索引时使用的分词器及过滤器 (4)、<analyzer type="query">定义搜索时所使用的分词器及过滤器 (5)、<tokenizer/>定义分词器 (6)、<filter/>定义过滤器 
2配置中文分词 
2.1 配置IKAnalyzer中文分词器 
注意:Solr4.X版本只能使用IK Analyzer 2012FF以上版本。配置步骤如下: 1.下载IKAnalyzer包 
下载地址:http://code.google.com/p/ik-analyzer/downloads/list 2.解压IK Analyzer 2012FF_hf1.zip包 用到其中三个文件: 
IKAnalyzer2012FF_u1.jar,放到$CATALINA_HOME/webapps/solr/WEB-INF/lib/目录下 
IKAnalyzer.cfg.xml,stopword.dic,放到$CATALINA_HOME/webapps/solr/WEB-INF/classes/目录下。 
3.设置IKAnalyzer中文分词 
修改$SOLR_HOME/collection1/conf/schema.xml文件,在<types></types>中增加如下内容: <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 


















<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> 
查询采用IK自己的最大分词法,索引则采用它的细粒度分词法,各自配置了isMaxWordLength属性。 
修改$SOLR_HOME/collection1/conf/schema.xml文件,在<fields></fields>中新增字段,或者修改如下内容: 
<field name="content" type="text_ik" indexed="false" stored="true" multiValued="true"/> <field name="text" type="text_ik" indexed="true" stored="false" multiValued="true"/>   ...... 
<copyField source="content" dest="text"/> 也可以自己增加删除相关字段。 4.重建索引,查询即可 
在管理界面点击collection1 >>analysis,然后在Analyse Fieldname / FieldType:下拉选择框中选择"content"或者"text_ik",关闭Verbose Output核选框,在Field Value (Index)与Field Value (Query)中输入中文句子,点击"Analyse Values"即可以看到分词结果。 
2.2 配置mmseg4j 
mmseg4j的配置与IKAnalyzer类似,但mmseg4j-1.9.x版本中有bug,会报错,需要修改后重新编译或者等待作者更新代码,也可以使用较低版本开发。mmseg4j版本支持情况具体如下: 
mmseg4j 1.8.3 只支持lucene 2.9/3.0 接口和 solr1.4。其它没改动。 mmseg4j 1.8.5 支持lucene 3.1, solr3.1。 mmseg4j 1.9.0 支持lucene 4.0, solr4.0。 此处以mmseg4j-1.9.1为例叙述配置步骤: 1.下载mmseg4j和搜狗词库 下载地址: 
http://code.google.com/p/mmseg4j/ 
http://code.google.com/p/mmseg4j/downloads/detail?name=data.zip&can=2&q 2.解压mmseg4j 
将\mmseg4j-1.9.1\dist下面的三个包拷贝到webapps/solr/WEB-INF/lib/目录下。在\webapps\solr目录下新建一个dic文件夹,把新下载的词库data里面的两个文件拷贝到dic目录下。 
3.修改schema.xml文件 
修改$SOLR_HOME/collection1/conf/schema.xml,在<types></types>中增加如下内容:  <fieldType name="textComplex" class="solr.TextField" > <analyzer> 
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="C:/solr/collection1/conf/mm4jdic"/> 
</analyzer> </fieldType> 
<fieldType name="textMaxWord" class="solr.TextField" > <analyzer> 
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" 


















dicPath="C:/solr/collection1/conf/mm4jdic"/> 
</analyzer> </fieldType> 
<fieldType name="textSimple" class="solr.TextField" > <analyzer> 
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" 
dicPath="C:/solr/collection1/conf/mm4jdic"/> 
</analyzer> </fieldType> 
修改$SOLR_HOME/collection1/conf/schema.xml文件,在<fields></fields>中新增自己的字段,或者修改如下内容: 
<field name="m4j_content" type="textSimple" indexed="false" stored="true" multiValued="true"/> 
<field name="m4j_text" type="textSimple" indexed="true" stored="false" multiValued="true"/> 
   ...... 
<copyField source="m4j_content "dest="text"/> MMSeg算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex加了四个规则过虑。自定义词库文件名必需是“words”为前缀和“.dic”为后缀。如:/data/words-my.dic。 
4.修改mmseg4j的小BUG 
以下内容参考:http://wxf4150.blog.163.com/blog/static/111380836201292911234802/ 修改mmseg4j源代码中的MMSeg.java,增加属性readerStatus并增加相关Setters与Getters: 
privateintreaderStatus; publicintgetReaderStatus() { returnreaderStatus;  } 
public void setReaderStatus(intreaderStatus) { this.readerStatus = readerStatus;  } 
修改mmseg4j源代码中的MMSegTokenizer.java: public void reset(Reader input) throws IOException {   //super.reset(input); super.setReader(input); mmSeg.reset(input);  }  ...... 
 @Override 
publicbooleanincrementToken() throws IOException { clearAttributes(); 
if(mmSeg.getReaderStatus() == 1) { mmSeg.reset(this.input); mmSeg.setReaderStatus(0); 



























































































































































  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值