IK Analyzer是一款结合了词典和文法分析算法的中文分词组件,基于字符串匹配,支持用户词典扩展定义,支持细粒度和智能切分,比如:

张三说的确实在理

智能分词的结果是:

张三 |  说的 |  确实 |  在理

最细粒度分词结果:

张三 |  三 |  说的 |  的确 |  的 |  确实 |  实在 |  在理

整合IK Analyzer比mmseg4j要简单很多,下载解压缩IKAnalyzer2012FF_u1.jar放到目录:E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib,修改配置文件schema.xml,添加代码:

1
2
3
4
5
6
<field name="content" type="text_ik" indexed="true" stored="true"/>
 
<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自己的最大分词法,索引则采用它的细粒度分词法

此时就算配置完成了,重启服务:java -jar start.jar,来看看IKAnalyzer的分词效果怎么样,打开Solr管理界面,点击左侧的Analysis页面

默认分词器进行最细粒度切分。IKAnalyzer支持通过配置IKAnalyzer.cfg.xml 文件来扩充您的与有词典以及停止词典(过滤词典),只需把IKAnalyzer.cfg.xml文件放入class目录下面,指定自己的词典mydic.dic

1
2
3
4
5
6
7
8
9
10
11
<?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">/mydict.dic;
/com/mycompany/dic/mydict2.dic;</entry> 
  
   <!--用户可以在这里配置自己的扩展停止词字典-->
  <entry key="ext_stopwords">/ext_stopword.dic</entry>   
</properties>

事实上前面的FieldType配置其实存在问题,根据目前最新的IK版本IK Analyzer 2012FF_hf1.zip索引时使用最细粒度分词,查询时最大分词(智能分词)实际上是不生效的。

据作者linliangyi说,在2012FF_hf1这个版本中已经修复,经测试还是没用,详情请看此贴

解决办法:重新实现IKAnalyzerSolrFactory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package org.wltea.analyzer.lucene;
    
   import java.io.Reader;
   import java.util.Map;
    
   import org.apache.lucene.analysis.Tokenizer;
   import org.apache.lucene.analysis.util.TokenizerFactory;
   //lucene:4.8之前的版本
   //import org.apache.lucene.util.AttributeSource.AttributeFactory;
   //lucene:4.9
   import org.apache.lucene.util.AttributeFactory;
    
   public class IKAnalyzerSolrFactory extends TokenizerFactory{
        
       private boolean useSmart;
        
       public boolean useSmart() {
           return useSmart;
       }
        
       public void setUseSmart(boolean useSmart) {
           this.useSmart = useSmart;
       }
        
        public IKAnalyzerSolrFactory(Map<String,String> args) {
            super(args);
            assureMatchVersion();
            this.setUseSmart(args.get("useSmart").toString().equals("true"));
          }
    
    
       @Override
       public Tokenizer create(AttributeFactory factory, Reader input) {
           Tokenizer _IKTokenizer = new IKTokenizer(input , this.useSmart);
           return _IKTokenizer;
       }
    
   }

重新编译后更新jar文件,更新schema.xml文件:

1
2
3
4
5
6
7
8
<fieldType name="text_ik" class="solr.TextField" >
        <analyzer type="index">
            <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart="false"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart="true"/>
        </analyzer>
</fieldType>

全文检索引擎Solr系列——整合中文分词组件IKAnalyzer的更多相关文章

  1. 全文检索引擎Solr系列——整合中文分词组件mmseg4j

    默认Solr提供的分词组件对中文的支持是不友好的,比如:“VIM比作是编辑器之神”这个句子在索引的的时候,选择FieldType为”text_general”作为分词依据时,分词效果是: 它把每一个词 ...

  2. Solr整合中文分词组件IKAnalyzer

    我用的Solr是4.10版本, 在csdn下载这个版本的IKAnalyzer:IK Analyzer 2012FF_hf1.zip 解压后目录如下: (1)这里还用solr自带的example实验分词 ...

  3. 全文检索引擎Solr系列——整合MySQL、MongoDB

    MySQL 拷贝mysql-connector-java-5.1.25-bin.jar到E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib目录下面 ...

  4. [摘]全文检索引擎Solr系列—–全文检索基本原理

    原文链接--http://www.importnew.com/12707.html 全文检索引擎Solr系列—–全文检索基本原理 2014/08/18 | 分类: 基础技术, 教程 | 2 条评论 | ...

  5. 全文检索引擎Solr系列—–全文检索基本原理

    场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到“坑爹”所在的位置,此时你会怎么查呢?毫无疑问,你的眼睛会从38页的第一个字开始从头至尾地扫描,直到找到“坑爹”二字为止.这种搜索方法叫做顺 ...

  6. 全文检索引擎Solr系列——Solr核心概念、配置文件

    Document Document是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的一条记录,可以包含一个或多个字段(Field),每个字段包含一个name和文本值. ...

  7. 全文检索引擎Solr系列——solr入门

    下载4.8.0版本,下载地址:http://archive.apache.org/dist/lucene/solr/4.8.0/ 解压后,得到文件夹视图如下: 解压缩solr,在example目录有s ...

  8. 全文检索引擎 Solr 部署与基本原理

    全文检索引擎 Solr 部署与基本原理 搜索引擎Solr环境搭建实例 关于 solr , schema.xml 的配置说明 全文检索引擎Solr系列-–全文检索基本原理 一.搜索引擎Solr环境搭建实 ...

  9. 全文检索引擎Solr 指南

    全文检索引擎Solr系列:第一篇:http://t.cn/RP004gl.第二篇:http://t.cn/RPHDjk7 .第三篇:http://t.cn/RPuJt3T

随机推荐

  1. MINA学习汇总

    MINA学习汇总 Apache Mina Server 是一个网络通信应用框架,用于开发高性能和高可用性的网络应用程序.它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(然,也可以提供JAVA ...

  2. rabbitmq High Availability

    每个rabbitmq node运行RabbitMQ application,共享用户virtual hosts, queues, exchanges, etc. 一个nodes组称之为一个集群. 所有 ...

  3. C# 捕获数据库自定义异常

    在 SQL Server 的存储过程中根据业务逻辑的要求,有时需要抛出自定义异常,由C#程序俘获之并进行相应的处理.SQL Server 抛出自定义异常和简单,像这样就可以了:RAISERROR('R ...

  4. grep 查询包含内容的文件

    加入到 ~/.bashrc 或者 ~/.bash_profile bash export GREPF_FILES=/mnt/d/Developer:/mnt/e/Developer function ...

  5. springboot打Jar包和War包

    一:打JAR包 在工程的pom.xml中添加以下依赖 <build> <plugins> <plugin> <groupId>org.springfra ...

  6. s​h​e​l​l​中​条​件​判​断​i​f​中​的​-​z​到​-​d​

    shell中条件判断if中的-z到-d的意思 2011-09-05 10:30 [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为 ...

  7. 一些开源搜索引擎实现——倒排使用原始文件,列存储Hbase,KV store如levelDB、mongoDB、redis,以及SQL的,如sqlite或者xxSQL

    本文说明:除开ES,Solr,sphinx系列的其他开源搜索引擎汇总于此.   A search engine based on Node.js and LevelDB A persistent, n ...

  8. Angular路由的定义和使用

    一.什么是routing(路由) Almost all non-trivial, non-demo Single Page App (SPA) require multiple pages. A se ...

  9. ARM体系结构总结

    特殊功能寄存器与外设绑定,通用寄存器是与CPU绑定. ARM是RISC架构 常用ARM汇编指令只有二三十条 ARM是低功耗CPU ARM的架构非常适合单片机.嵌入式.尤其是物联网领域:而服务器等高性能 ...

  10. vue仿京东画线验证码,前端手指位置数据获取

    需求是这样的,京东H5移动端登录,有个安照箭头方向,画线登录的验证,看看是怎么实现的: 直接上代码了: <template> <div v-if="visible" ...