
1. IKAnalyzer是什么
IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目 Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
2. 为什么要分词?
因为搜索这种东西,不是像字符串查询那样,完全按照关键字去对比。比如有一往篇文章,我们要通过一个关键字来搜索这篇文章的内容。首先,我们要对这个文章建立索引,怎么建立的,就是通过分词来建立的,分好词组以后。再通过关键字与每个分词的索引进行比对,有就是有,没得就找不到。如果分词没做好,比如: 在《地藏经》第十二品《见闻利益品》,说读经的时候、没有记忆力
我们用IK分词,结果如下:
在|地藏经|藏经|第|十二|品|见闻|见|闻|利益|品|说|读经|的|时候|没有|有|记忆力|记忆|力|
如果我们输入“地藏”两个字,那么结果就搜索不出来,所以分词对搜索来说,相当重要。
3. 解释一下Lucene还有 IK 要解决一个什么问题,以及大致的原理
我们传统的数据库是把文本整段存在库里面,当是搜索一个词的时候,它使用这个词去大文本里面去匹配,这个匹配过程速度很慢。Lucene是一个全文搜索引擎,它的思路是倒过来的。它做的事情分成两个阶段。第一阶段是把文章,也就是长文本在存储的时候建索引。建索引的过程要把文本按照词来切分。切分的时候是按词源切分,再把每个词都作为索引,指出词在文章中的位置以及跟哪些文章相关联。当有大量文章进来的时候,你可以想象一下有一个字典,这个字典是按照词来排序,每个词都会记录有哪些文章引用到我了,以及文章的哪些部分。这个索引的过程就是Lucene做的一个存储过程。那在这个存储过程中,对于英文而言基本上按照空格来切分就可以了,但是中文是连续性的,所以计算机就需要一个能够识别中文词汇的程序和算法,这就是中文分词器。分词器在文章进入到数据库的时候,对它进行分词。比如用户输入了“咖啡牛排”,那分词器就要把这个切分成“咖啡”和“牛排”。
4. 配置IKAnalyzer分词器
ext.dic为扩展字典,stopword.dic为停止词字典,IKAnalyzer.cfg.xml为配置文件,solr-analyzer-ik-5.1.0.jar ik-analyzer-solr5-5.x.jar为分词jar包。
- 解压IKAnalyzer包

- 将文件夹下的IKAnalyzer.cfg.xml , ext.dic和stopword.dic 三个文件 复制到/usr/local/apache-tomcat-8.5.12/webapps/solr/WEB-INF/classes/目录下

- 复制solr-analyzer-ik-5.1.0.jar ik-analyzer-solr5-5.x.jar到/usr/local/apache-tomcat-8.5.12/webapps/solr/WEB-INF/lib/目录下

- 修改/usr/local/apache-tomcat-8.5.12/webapps/solr/WEB-INF/classes/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>
</properties>
- 在/usr/local/apache-tomcat-8.5.12/solrhome/mukl/conf/managed-schema 文件</schema>前增加如下配置

<!-- 我添加的IK分词 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
</analyzer>
</fieldType>

- 重启Tomcat

网友评论