solr中文同义词检索的配置讲解

来源:互联网 发布:windows 8 解锁 驱动器 编辑:程序博客网 时间:2024/04/30 21:32

1配置同义词首先是要基于中文分词的基础上进行的,如果检索关键词不能够进行中文分词那么是查询不到相关的同义词的(如果solr没有配置同义词,请参考附录进行配置,配置完成后进行后续操作)

 

2 如果是IKAnalyzer中文分词修改fileType text_ik,如果是mmseg4j中文分词修改fileType text_mmseg4j,添加同义词的filter

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"

ignoreCase="true" expand="true" />如下图所示:

 

或者

 

 

修改C:\solr\apache-solr-3.4.0\example\multicore\core0\conf\synonyms.txt

添加 台湾,台灣,臺灣 南京,金陵,建康这些词语都是表示一个意思,修改完之后另存为UTF-8格式,要不然是不会起效果的。

 

 

4 reindex solr数据并重启tomcat之后查询分词结果,如下面的红框结果代表同义词添加成功。

 

 

5 输入建康查询到三笔数据,分别是南京,金陵,建康,整合完成。

 

 

 

 

 

 

 

附录:中文分词器的配置说明(IKAnalyzermmseg4j

1 IKAnalyzer分词器配置。

 1.1拷贝IKAnalyzer2012_u6\IKAnalyzer2012_u6.jarC:\apache-tomcat-6.0.32\webapps\

solr\WEB-INF\lib文件夹下面

 1.2 C:\apache-tomcat-6.0.32\webapps\solr\WEB-INF文件夹下面新建classes文件夹,拷贝IKAnalyzer2012_u6\IKAnalyzer.cfg.xmlIKAnalyzer2012_u6\stopword.dicclasses文件夹里面,修改IKAnalyzer.cfg.xml,新增

<entry key="ext_dict">ext.dic;</entry>

 

classes下面新建ext.dic文件,ext.dic里面是新增自己要添加的扩展词,stopword.dic里面是自己新增的停止词,有些词语分词没什么意义,所以我们就要把它过滤掉,例如a an and 啊 哦,修改完之后把编码保存为UTF-8格式,要不然不起效果,

 1.3 修改C:\solr\apache-solr-3.4.0\example\multicore\core0\conf\schema.xml文件,新增类型text_iktitle_search字段类型改成text_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>

 

<field name="title_search" type="text_ik" indexed="true" stored="true"/>

 

 

 1.4 reindex solr数据之后,进行查询,可以查看分词效果。

 

 1.5 搜索足球,得到这笔数据,分词成功。

 

 

2 mmseg4j分词器配置。

  2.1mmseg4j-1.8.5\dist下面的所有jar文件拷贝C:\apache-tomcat-6.0.32\webapps\

solr\WEB-INF\lib文件夹下面

  2.2 拷贝data到C:\solr\apache-solr-3.4.0\example\multicore中(与core文件平级),并改名为dic

2.2.1 chars.dic,是单个字,和对应的频率,一行一对,字在全面,频率在后面,中间用空格分开。这个文件的信息是complex 模式要用到的。在最后一条过虑规则中使用了频率信息。从1.5 版后已经把它打包进jar 里,一般不用关心它。不过可以在词库目录下放一个同名文件覆盖它。

2.2.2 units.dic,是单位的字,如:分、秒、年。这一文件是我在 mmseg4j 1.6后加入的,也是一行一条。主要是在数字后面的单位信息切分好,不与words.dic中的词有混淆。同时也打包进jar 里,目前还是试行,如果不喜欢它,可以用空的文件放到词库目录下覆盖它。

2.2.3 words.dic,是核心的词库文件,一行一条,不需要其它任何数据(如词长)。1.0版是用 rmmsegrubymmseg实现) 的词库。1.5版后mmseg4j 改用sogou 词库,可以http://www.sogou.com/labs/dl/w.html 找到下载。然后我把它去了频率等信息,并转为 UTF-8编码。

2.2.4 words-my.dic,是自定义词库文件(其实是 mmseg4j可以从多个文件读取词)。这功能是 1.6版加入的。它的格式与 words.dic一样,只不过 XXX部分是如您自己写的名字,如:源码包里的 data/words-my.dic。注意:自定义词库文件名必需是"words" 为前缀和".dic" 为后缀。

2.2.5修改完之后把编码保存为UTF-8格式,要不然不起效果,

 2.3 修改C:\solr\apache-solr-3.4.0\example\multicore\core0\conf\schema.xml文件,新增类型text_mmseg4jtitle_sort字段类型改成text_mmseg4j

  <!-- mmseg4j分词器 -->

<fieldType name="text_mmseg4j" class="solr.TextField" >

<analyzer type="index">

<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="../dic" /><!--此处为分词器词典所处位置-->

</analyzer>

<analyzer type="query">

<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="../dic" /><!--此处为分词器词典所处位置-->

</analyzer>

</fieldType>

 

<field name="title_sort" type="text_mmseg4j" indexed="true" stored="true"/>

 

 

 2.4 reindex solr数据之后,进行查询,可以查看分词效果。

 

 

2.5 搜索足球,得到这笔数据,分词成功。

 

 

0 0