solr 添加 IK 分词器和sougou词库

1  solr索引和搜索过程:



 

2  分词器:

在创建索引时会用到分词器,在使用字符串搜索时也会用到分词器,这两个地方要使用同一个分词器,否则可能会搜索不出结果。
Analyzer(分词器)的作用是把一段文本中的词按一定规则进行切分。对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言(规则),要用不同的分词器。(也就是说不同的分词器分词的规则是不同的!)

分词器的一般工作流程:
1、切分关键词
2、去除停用词(去掉干扰字符)
3、对于英文单词,把所有字母转为小写(搜索时不区分大小写)

停用词:

有些词在文本中出现的频率非常高,但是对文本所携带的信息基本不产生影响。
英文 
a、an、the、of...
中文
的、了、着、是 、标点符号等
文本经过分词之后,停用词通常被过滤掉,不会被进行索引。
在检索的时候,用户的查询中如果含有停用词,检索系统也会将其过滤掉(因为用户输入的查询字符串也要进行分词处理)。
排除停用词可以加快建立索引的速度,减小索引库文件的大小。
英文停用词:http://blog.csdn.net/shijiebei2009/article/details/39696523
中文停用词http://wenku.baidu.com/link?url=I8__RQMCRwSwcru8nPHLu7U5pvt7h8z_kEVU1vgN9Td1UWN88u_qyxZ4k-fERH9SJCXn7wiMWPH6aBpb2ZTnXE7ro9JEl-rGFh4KUxl7YZu

中文分词器

单字分词:
如:“我们是中国人”效果:“我”“们”“是”“中”“国”“人”(StandardAnalyzer、ChineseAnalyzer就是这样)
二分法分词:按两个字进行切分。
如:“我们是中国人”,效果:“我们”、“们是”、“是中”、“中国”、“国人”。(CJKAnalyzer就是这样)。
词库分词:按某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语。通常词库分词被认为是最理想的中文分词算法。

几个重要的分词器



 3  使用IKAnalyzer2012分词和搜狗词库:

1 把IKAnalyzer2012FF_u1.jar包导入solr-web应用下的lib目录下solr4/example/solr-webapps/webapp/web-inf/lib/

2 把IKAnalyzer.cfg.xml和stopword.dic文件放置到solr-web类路径下(classes)  solr4/example/solr-webapps/webapp/WEB-INF/classes/

3 修改solr的schema.xml 增加ik的引用 
<!--配置IK分词器-->
    <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自己的最大分词法。


4 添加自定义词库
  将sougou.dic无BOM utf8格式词库拷贝到solr4/example/solr-webapps/webapp/WEB-INF/classes/下和stopword.dic同级
  
 修改solr/example/solr-webapps/webapp/WEB-INF/classes/IKAnalyzer.cfg.xml
 添加sougou.dic  写绝对和相对路劲都可以  相对路径是相对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">sougou.dic;</entry>    
    -->   
    <entry key="ext_dict">ext.dic;</entry>   
    <!--用户可以在这里配置自己的扩展停止词字典-->   
    <entry key="ext_stopwords">stopword.dic;</entry>    
</properties>   

5  修改solr的schema.xml 将字段比如 name使用默认分词类型修改为 我们定义的 text_ik 重启solr 这样查询name的时候默认就使用text_ik我们的分词器了

ik查询结果图如下:



 

附件是修改好的 IKAnalyzer2012FF_u1.jar,  schema.xml , sougou.dic  ,  IKAnalyzer.cfg.xml


 

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2282371