solr5.2.1之IK分词器的配置

网上其他关于IK分词器的介绍一般都是从文本文件中加载词库,我根据网上下载的ik分词器jar包,反编译后,修改了源码,支持从数据库定时增量导入词库。同时也支持从文本文件中导入词库,但没有定时增量导入的功能。
1、下载ik-analyzer-solr-dc-5.2.1.jar并上传到/opt/solr-5.2.1/server/solr-webapp/webapp/WEB-INF/lib
2、修改/opt/solr/server/solr/configsets/data_driven_schema_configs/conf/managed-schema文件

(1)定义类型
<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>
或者使用下面的方式:
<fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index" useSmart="false">
        <!--Tokenizer:接收text(通过从solr那里获得一个reader来读取文本),拆分成tokens,输出token stream-->
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>

        <!--Filter:接收token stream,对每个token进行处理(比如:替换、丢弃、不理),输出token stream-->
        <!--因此,在配置文件中,Tokenizer放在第一位,Filter放在第二位直到最后一位。-->
        <!--由于filters是顺序执行的,前一个的结果是后一个是输入,所以,一般通用的处理放在前面,特殊的处理靠后-->
        <!--<filter class="solr.StandardFilterFactory"/> -->
    </analyzer>
    <analyzer type="query" useSmart="false"> 
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
    </analyzer>
</fieldType>


(2)使用类型
<field name="text" type="text_ik" indexed="true" stored="true"  multiValued="false" />

3、如果要自定义词库时,需要执行这步骤。

(1)准备IKAnalyzer.cfg.xml配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
    <properties>  
            <comment>IK Analyzer 扩展配置</comment>
            <!--用户可以在这里配置自己的扩展字典,如果有多个,用分号分割 -->
            <entry key="ext_dict">ext.dic;</entry> 
            <!--用户可以在这里配置自己的扩展停止词字典,如果有多个,用分号分割-->
            <entry key="ext_stopwords">stopword.dic;</entry> 
            <!--如果需要从数据库中定时更新词库到solr里,则需要如下配置-->
            <!--数据库url、数据库用户名、密码、那张表-->
            <entry key="database_url">jdbc:mysql://192.168.1.222:3306/test</entry>
            <entry key="user_name">root</entry>
            <entry key="password">123456</entry>
            <entry key="table_name">t_tict</entry>
            <!--table_name表中的一个字段,long或int型,类似于主键,全表唯一索引,用于solr记录以前更新到了那条数据,key必须为seq_no,值为数据库字段-->
            <entry key="seq_no">seq_no</entry>
            <!--定时更新时间间隔,单位为秒-->
            <entry key="period">60</entry>
    </properties>

(2)准备ext.dic和stopword.dic文件,这2个文件就是普通的文本文件,每行一个词,注意最好用notepad++以UTF-8无BOM格式编码。
    比如在ext.dic中输入:魔兽世界,那么在分词的时候就会分为魔兽世界、魔兽、世界三个词,如果没有自定义词库,那么ik会将其分为魔兽、世界两个词。
    stopword.dic:停顿词,一般用没有实际意义的词,比如:啊、等、等等、虽然、但是

(3)将上述文件上传到各个节点的/opt/solr-5.2.1/server/solr-webapp/webapp/WEB-INF/classes目录下(如果没有classes文件夹,需要自己创建)

4、重启各节点的solr服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值