前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >solr中使用IKAnalyzer配置同义词,停止词,扩展词

solr中使用IKAnalyzer配置同义词,停止词,扩展词

作者头像
Mshu
发布2018-10-31 10:43:15
1.6K0
发布2018-10-31 10:43:15
举报
文章被收录于专栏:咸鱼不闲

环境如下: solr4.7 IKAnalyzer2012FF_u1

配置同义词

第一步 将IKAnalyzer2012FF_u1放到solr-4.7.2/example/solr-webapp/webapp/WEB-INF/lib 目录下 第二步 修改schema.xlm文件 如下:

代码语言:javascript
复制
   <fieldType name="text_ik" class="solr.TextField">   
        <analyzer type="query" >
          <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerTokenizerFactory" useSmart="false"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
        </analyzer>
      <analyzer type="index">
          <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerTokenizerFactory" useSmart="false"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
      </analyzer> 
    </fieldType> 

使用IKAnalyzer2012FF_u1的小伙伴可能要不开心了,报错了!“插件初始化失败”(自行对应english), 聪明一点的小伙伴要骂人了,他解压IKAnalyzer2012FF_u1文件到C:UsersAsusDesktopIKAnalyzer2012FF_u1orgwlteaanalyzerlucene目录发现没有IKAnalyzerTokenizerFactory。

没有就对了,官方的包就没有。 我来讲讲: 在没使用同义词之前大家的schema.xlm文件是这样的(分词器由analyzer标签包裹):

代码语言:javascript
复制
   <fieldType name="text_ik" class="solr.TextField">   
         <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
    </fieldType>

如果要写成最上面的那种格式使用<tokenizer>标签包裹分词器的话,就需要用到继承了TokenizerFactory类的子类。 大家可以写一个TokenizerFactory类编译后重新打包。 TokenizerFactory类网上有很多一搜及到,但是我不会编译后重新打包。因为这个类需要导包,希望大家能分享我一篇关于编译需要导包的java文件的文章学习学习。 所以,我跋山涉水找到了加入TokenizerFactory的jar包。花了我三个积分呢,在这里我分享给大家镇文之宝。 链接: https://pan.baidu.com/s/1hsqZ7Go 密码: f39q

废两句话:

代码语言:javascript
复制
1.tokenizer标签就是分词器的意思,里面需要包裹分词器。
2.schema.xml里面<tokenizer>标签默认用的是WhitespaceTokenizerFactory,
就是根据空格来分词,但是中文词汇不是用空格隔开所以才有了中文分词器。

第三步 新建synonyms.txt文件,放在con目录下,保存同义词的字典格式如下

代码语言:javascript
复制
什么 => 啥
啥 => 什么

或者

代码语言:javascript
复制
什么,啥(逗号是英文格式下的)

注意:synonyms.txt文件写完必须另存为选择utf-8编码。

配置停止词和扩展词

停止词 的功能是过滤,把“啊”加入到停止词的字典里,比如搜索“你好啊”,solr会过滤掉“啊”,以“你好”去搜索。应该叫过滤词才好。

扩展词 的功能是强制让扩展词字典里的词不被中文分词器分开,叫它自定义词也好理解。

第一步 将IKAnalyzer.cfg.xml和stopword.dic以及ext.dic放到 webapp/WEB-INF/classes目录下,没有classes就新建。

stopword.dic是停止词的字典。里面写的是需要过滤的词或字。 ext.dic是扩展词的字典。里面写的是需要过滤的词或字。

第二步 编写三个文件, IKAnalyzer.cfg.xml的内容如下:

代码语言:javascript
复制
<?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>

注意 :两个dic文件必须是utf-8编码保存,第一行空出来,第二行开始写,之后每行只写一个词或字。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置同义词
  • 配置停止词和扩展词
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档