奥门永利误乐域Solr的安装配置,添加中文分词器

log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置)

主要分四部分:solr的基本配置,多核配置,dataimporthander使用mysql数据集的配置,以及mmseg4j和KAnalyzer中文分词器的配置。

一、场景和需求

Solr基本配置

1)安装jdk和tomcat,配置java环境变量。
2)把解压后的solr/example/solr/dist/
apache-solr-3.6.2.war复制到tomcat/webapps目录下,并重命名为solr.war。启动tomcat,就可以解压solr.war,可以发现在webapps目录下多了一个solr目录。
3)修改/tomcat/conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" URIEncoding="UTF-8”/>

增加URIEncoding=”UTF-8”,防止出现乱码。

4)
JNDI设置severlet运行参数:在tomcat/conf/Catalina/localhost/目录下创建solr.xml文件

添加内容

<Context docBase="/usr/local/tomcat/webapps/solr.war" debug="0" crossContext="true">
    <Environment name="solr/home" type="java.lang.String" value="/usr/local/solr/work/solr" override="true"/>
</Context>

docBase=”/usr/local/tomcat/webapps/solr.war”指定Tomcat运行的serverlet;
value=”/usr/local/solr/work/solr”指定solr的工作目录,即solor.home。

5)
在源码目录下面的example有已经配置好单实例(solr)和多实例(multicore)的模板,可以直接修改后使用。

需要把example/lib/ext/*下面的jre包放入到tomcat/webapps/solr/WEB-INF/lib/目录下面,否侧提示catilina.out日志中显示错误信息“SEVERE:
Error
filterStart”。注意查看catalina.out和localhost.year-month-day.log两个日志。

cp /usr/local/solr/example/lib/ext/* /usr/local/tomcat/webapps/solr/WEB-INF/lib/

假设我现在有3个独立的用project(暂时用maven关联起来,当然也可以不用maven),一个是提供公共服务的infrastructure,一个是提供存储的persister,一个是提供搜索的searcher,其中提供基础服务的所有的类,例如DateUtils,HttpUtils等工具类都位于目录com.chuanliu.platform.activity下,而提供存储服务的所有类都位于com.chuanliu.platform.activity.persist目录下,提供搜索服务的所有类都位于com.chuanliu.platform.activity.solr下。

Solr多核配置

example目录下面已经存在core0和core1两个核,复制模板并修改相应的参数。

1、cp –rf core1 testcore
2、修改配置文件在multicore下面的solr.xml文件
添加:

<core name=”test”  instanceDir=”testcore” />

因而一共有三个core:core0、core1、testcore

<cores adminPath="/admin/cores">
    <core name="core0" instanceDir="core0" />
    <core name="core1" instanceDir="core1" />
    <core name="test"  instanceDir="testcore" />
</cores>

也可以通过指定索引数据的存放目录,默认的存放目录为test/core/data/index/。通过下面的选项可以修改数据目录,”.”为当前目录,可以修改为指定目录。

<core name="test" instanceDir="testcore ">
    <property name="dataDir" value=". " />
</core>

solr.xml文件中的另外两个配置选项,定义为:

  • 奥门永利误乐域,persistent: Save changes made via the API to this file
  • sharedLib: path to a lib directory that will be shared across all
    cores
  • persistent:字面意思“持久”,该选项决定在solr运行时通过API和Admin
    UI(web管理页面)修改的数据是否保存。persistent=”false”,任何运行时修改的数据将不会保存,即下次启动solr时这些将会失效。
  • shareLib:设置jar共享目录,如分词器、jdbc驱动。该目录下的jar包,可以被任一核使用,该路径可以是相对
    solr home 的,也可以是绝对的。

使用mysql作为Solr源数据集(dataimporthander的使用

1、
下载mysql的jdbc驱动,放入tomcat/webapps/solr/WEB-INF/lib目录中(mmseg4j分词器的jar包也在该目录中)。
2、
将下载的solr源文件中dist目录中dataimporthander的jar文件复制到solrconfig.xml指定的“lib
dir”指定的目录中。

<lib dir="/usr/local/solr/dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />
<lib dir="/usr/local/solr/contrib/dataimporthandler/lib/" regex=".*\.jar" />

regex=”apache-solr-dataimporthandler-\d.*.jar”需要注意实际dataimporthandler的jre包的名字。

3、 在core/conf下添加数据源连接文件mysql.xml

<dataConfig>
    <dataSource type="JdbcDataSource"
    driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://192.168.3.90/test"
    user="sylar"
    password="sylar"/>

    <document name="test">
     <entity name="uid" pk="uid" query="select user.uid,user.uname,user.title from user"> </entity>
    </document>
</dataConfig>

4、 修改solrconfig.xml文件,添加一下内容。

DHI设置,其中指定mysql.xml文件作为数据源配置文件。

<requestHandler name="/dataimport">
    <lst name="defaults">
        <str name="config">mysql.xml</str>
    </lst>
</requestHandler>

5、 修改schemal.xml配置文件

<fields>
    <field name="uid"     type="int"      indexed="true"  stored="true"  multiValued="false" />
    <field name="uname"  type="string"    indexed="true"  stored="true"  multiValued="false" />
    <field name="title"    type="string"    indexed="true"  stored="true" />
</fields>

当solr不能正常工作时查看tomcat的catalina.out和localhost.year-month-day.log两个日志,注意里面的错误信息。

现在项目的需求是有一个log文件叫full.log,需要记录所有的日志,不管是infrastructure下的,还是persister下的,还是seracher下的,另外还需要一个日志文件叫solr.log,记录所有发生在搜索目录下的日志。当然将来还应该将searcher目录下的日志放在searcer.log中。

添加mmsegj4中文分词器

1、
解压mmsegj4-1.8.5.zip的压缩包,把解压后的mmseg4j-all-1.8.5.jar复制到tomcat/webapps/solr/WEB_INF/lib/目录下。
2、
在tomcat/webapps/solr/目录下建立dict,存放词典。把解压后的data目录中的四个文件(chars.dic
、units.dic 、words.dic
、words-my.dic)复制到dict目录下。在下一步中分词器(analyzer)将会指向这个词典的路径。
3、 cp /usr/local/solr/example/lib/ext/*
/usr/local/tomcat/webapps/solr/WEB-INF/lib/
4、 修改tomcat/webapps/solr/conf/schema.xml文件。

<types></types>域中添加:

<fieldtype name="textComplex" positionIncrementGap="100">
    <analyzer>
       <tokenizer mode="complex" dicPath="/usr/local/tomcat/webapps/solr/dict"></tokenizer>
    </analyzer>
</fieldtype>

<fieldtype name="textMaxWord" positionIncrementGap="100">
    <analyzer>
       <tokenizer mode="max-word" dicPath="/usr/local/tomcat/webapps/solr/dict"></tokenizer>
    </analyzer>
</fieldtype>

<fieldtype name="textSimple" positionIncrementGap="100">
    <analyzer>
       <tokenizer mode="simple" dicPath="/usr/local/tomcat/webapps/solr/dict"></tokenizer>
    </analyzer>
</fieldtype>

在<fields></fields>域中添加

<field name="simple" type="textSimple" indexed="true" stored="true" multiValued="true"/>
<field name="complex" type="textComplex" indexed="true" stored="true" multiValued="true"/>
<field name="text_cn" type="textMaxWord" indexed="true" stored="true" multiValued="true"/>

添加copyField

<copyField source="simple" dest="text_cn"/>
<copyField source="complex" dest="text_cn"/>

5、 重新启动Tomcat,测试http://IP:8080/solr/admin/analysis.jsp页面。

除此之外还应该支持根据不同的部署环境设置不同的log输出位置,因为windows和linux具有不同的目录结构。

添加IKAnalyzer中文分词器

1、
解压得到的IKAnalyzer2012.jar文件拷贝到
tomcat/webapps/solr/WEB-INF/lib/下。 2、
修改tomcat/webapps/solr/conf/schema.xml文件

在Types域添加

<fieldType name="textIKA" positionIncrementGap="100">
    <analyzer type="index">
    <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" />
    <filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
<filter />

<filter protected="protwords.txt" />
    <filter />
    </analyzer>
    <analyzer type="query">
    <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" />
    <filter synonyms="synonyms.txt" ignoreCase="true" expand="true" />
    <filter ignoreCase="true" words="stopwords.txt" />
    <filter generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
<filter />

<filter protected="protwords.txt" />
    <filter />
    </analyzer>
</fieldType>

在fields域添加

<field name="text_ika" type="textIKA" indexed="true" stored="true" required="true" />

3、 重启Tomcat,测试

二、无论是log4j1还是log4j2中,都可以使用如下配置:

log4j.rootLogger = info
log4j.debug = false

log4j.category.com.chuanliu.platform.activity = info, full, stdout
#The child logger appender will not inherit the parent logger's appender, or the logs will be output twice in the file
log4j.additivity.com.chuanliu.platform.activity.platform.activity = false

log4j.category.com.chuanliu.platform.activity.solr = info, solr
log4j.additivity.com.chuanliu.platform.activity.platform.activity.solr = false

###### activity full log: contains all of the log ####
#full
log4j.appender.full = org.apache.log4j.DailyRollingFileAppender
log4j.appender.full.File = ${LogFile.Location}/full.log
log4j.appender.full.DatePattern = '.'yyyy-MM-dd
log4j.appender.full.layout = org.apache.log4j.PatternLayout
log4j.appender.full.layout.conversionPattern = %d [%t] %-5p %c{1} - %m%n
log4j.appender.full.ImmediateFlush = true
log4j.appender.full.append = true

######activity full log ####

######activity solr log : only contain the log in searcher####
#solr
log4j.appender.solr = org.apache.log4j.DailyRollingFileAppender
log4j.appender.solr.File = ${LogFile.Location}/solr.log
log4j.appender.solr.DatePattern = '.'yyyy-MM-dd
log4j.appender.solr.layout = org.apache.log4j.PatternLayout
log4j.appender.solr.layout.conversionPattern = %d [%t] %-5p %c{1} - %m%n
log4j.appender.solr.ImmediateFlush = true
log4j.appender.solr.append = true
######activity solr log ####

# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d][%p]%t: %m%n

# log sql for mybatis 
log4j.logger.mybatis =TRACE


org.springframework.web=debug 

发表评论

电子邮件地址不会被公开。 必填项已用*标注