全文检索引擎Solr系列——整合中文分词组件mmseg4j
默认Solr提供的分词组件对中文的支持是不友好的,比如:“VIM比作是编辑器之神”这个句子在索引的的时候,选择FieldType为”text_general”作为分词依据时,分词效果是:
它把每一个词都分开了,可以想象如果一篇文章这样分词的搜索的体验效果非常差。能够和Solr集成的中文分词组件有很多,比如:mmseg4j、IkAnalyzer、ICTCLAS等等。各有各的特点。这篇文章讲述如何整合Solr与mmseg4j。mmeseg4j最新版本是1.9.1,下载解压,提取其中的三个文件:mmseg4j-analysis-1.9.1.jar, mmseg4j-core-1.9.1.jar,mmseg4j-solr-1.9.1.jar。放到目录:E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib,修改配置文件schema.xml,添加下面的两段代码:
fieldType:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<!-- mmseg4j--><fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" > <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/> </analyzer> </fieldType> <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" > <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="dic"/> </analyzer> </fieldType> <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" > <analyzer> <!-- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="n:/OpenSource/apache-solr-1.3.0/example/solr/my_dic"/> --> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="dic"/> </analyzer> </fieldType><!-- mmseg4j--> |
与fieldType对应的field:
|
1
2
3
4
5
|
<!-- mmseg4j --><field name="mmseg4j_complex_name" type="text_mmseg4j_complex" indexed="true" stored="true"/><field name="mmseg4j_maxword_name" type="text_mmseg4j_maxword" indexed="true" stored="true"/><field name="mmseg4j_simple_name" type="text_mmseg4j_simple" indexed="true" stored="true"/><!--mmseg4j --> |
此时就算配置完成了,重启服务:java -jar start.jar,来看看mmseg4j的分词效果怎么样,打开Solr管理界面,点击左侧的Analysis页面
对比之前的分词效果,改进了很多,差不多就是正常的语义了。这里在分词的时候你有可能会遇到一个问题:
TokenStream contract violation: reset()/close() call missing, reset() called multiple times, or subclass does not call super.reset(). Please see Javadocs of TokenStream class for more information about the correct consuming workflow.
这个是Solr4.8环境下mmseg4j的一个bug,这是mmseg4j-analysis-1.9.1.jar引起的,需要修改源码,找到文件:mmseg4j-1.9.1\mmseg4j-analysis\src\main\java\com\chenlb\mmseg4j\analysis\MMSegTokenizer.java,加上super.reset():
|
1
2
3
4
5
6
7
|
public void reset() throws IOException { //lucene 4.0 //org.apache.lucene.analysis.Tokenizer.setReader(Reader) //setReader 自动被调用, input 自动被设置。 super.reset(); //加上这一行 mmSeg.reset(input);} |
修改完之后用maven重启编译:mvn clean package -DskipTests,用新的mmseg4j-1.9.1\mmseg4j-analysis\target\mmseg4j-analysis-1.9.2-SNAPSHOT.jar替换掉原来那个文件,重启服务就ok了。
mmeseg4j-1.9.1这个版本的的词库全部打包放在了jar文件里面,因此无需再指定词库文件(chars.dic,units.dic,words.dic),当然你也可以覆盖这些文件,只需要吧预替换的文件放在在WEB-INF\data\即可。
现在添加两个中文文档到索引中去,试试mmeseg4j的效果怎么样:
|
1
2
3
4
5
6
7
8
9
10
|
<add> <doc> <field name="id">0001</field> <field name="mmseg4j_complex_name">把Emacs比作是神的编辑器,VIM比作是编辑器之神,2012年开始接触VIM,一直沿用至今,也曾今总结过VIM的相关知识,文章都整理在以前的ITeye博客和GitHub,这款古而不老的编辑器至今仍受众多程序员追捧,当然我也是忠实的VIM用户,这篇文章就是用VIM编辑完成。</field> </doc> <doc> <field name="id">0002</field> <field name="mmseg4j_complex_name">用Google搜索"Python IDE",第一条就是stackoverflow上一个非常热门的问题:"what IDE to use for Python",上百种编辑器的功能对比图让人眼花缭乱。其中有我接触过的几款编辑器(IDE)包括:Eclilpse(PyDev)、VIM、NotePad++、PyCharm。如果你的日常开发语言是Python的话,再搜索"python vim",大约有328万条结果,可见用VIM做Python开发的程序员那是相当之多,我大概总结的几点原因,当然不一定正确</field> </doc> </add> |
保存为utf-8格式的文件名:mmseg4j-solr-demo-doc.xml,加入到Solr中去:
|
1
2
3
4
5
6
7
|
E:\solr-4.8.0\example\exampledocs>java -jar post.jar mmseg4j-solr-demo-doc.xmlSimplePostTool version 1.5Posting files to base url http://localhost:8983/solr/update using content-type application/xml..POSTing file mmseg4j-solr-demo-doc.xml1 files indexed.COMMITting Solr index changes to http://localhost:8983/solr/update..Time spent: 0:00:01.055 |
看搜索结果:
全文检索引擎Solr系列——整合中文分词组件mmseg4j的更多相关文章
- 全文检索引擎Solr系列——整合中文分词组件IKAnalyzer
IK Analyzer是一款结合了词典和文法分析算法的中文分词组件,基于字符串匹配,支持用户词典扩展定义,支持细粒度和智能切分,比如: 张三说的确实在理 智能分词的结果是: 张三 | 说的 | 确实 ...
- 全文检索引擎Solr系列——整合MySQL、MongoDB
MySQL 拷贝mysql-connector-java-5.1.25-bin.jar到E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib目录下面 ...
- [摘]全文检索引擎Solr系列—–全文检索基本原理
原文链接--http://www.importnew.com/12707.html 全文检索引擎Solr系列—–全文检索基本原理 2014/08/18 | 分类: 基础技术, 教程 | 2 条评论 | ...
- 全文检索引擎Solr系列—–全文检索基本原理
场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到“坑爹”所在的位置,此时你会怎么查呢?毫无疑问,你的眼睛会从38页的第一个字开始从头至尾地扫描,直到找到“坑爹”二字为止.这种搜索方法叫做顺 ...
- Solr整合中文分词组件IKAnalyzer
我用的Solr是4.10版本, 在csdn下载这个版本的IKAnalyzer:IK Analyzer 2012FF_hf1.zip 解压后目录如下: (1)这里还用solr自带的example实验分词 ...
- 全文检索引擎Solr系列——Solr核心概念、配置文件
Document Document是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的一条记录,可以包含一个或多个字段(Field),每个字段包含一个name和文本值. ...
- 全文检索引擎Solr系列——solr入门
下载4.8.0版本,下载地址:http://archive.apache.org/dist/lucene/solr/4.8.0/ 解压后,得到文件夹视图如下: 解压缩solr,在example目录有s ...
- 全文检索引擎 Solr 部署与基本原理
全文检索引擎 Solr 部署与基本原理 搜索引擎Solr环境搭建实例 关于 solr , schema.xml 的配置说明 全文检索引擎Solr系列-–全文检索基本原理 一.搜索引擎Solr环境搭建实 ...
- 全文检索引擎Solr 指南
全文检索引擎Solr系列:第一篇:http://t.cn/RP004gl.第二篇:http://t.cn/RPHDjk7 .第三篇:http://t.cn/RPuJt3T
随机推荐
- SSM框架关于后台返回JSON数据中显示很多不需要的字段为NULL
xml 配置 spring mvc 的 json 返回忽略 null 字段 <mvc:annotation-driven> <mvc:message-converters regis ...
- IIS 搭建过程
Windows自带iis管理器,也就是这个 <ignore_js_op> 我们可以用它来搭建一个网站,然后在局域网内可随意访问我们的电脑. 1.首先,iis的安装. ...
- ftp 工作原理
- TFTP服务器 NFS服务器 smb 、wireshark
在嵌入式开发过程中有宿主机和目标机的角色之分 宿主机是执行编译.链接嵌入式软件的计算机:目标机是运行嵌入式软件的硬件平台 宿主机一般通过网络.USB.JTAG等方式将软件下载到目标机. 网络下载:tf ...
- Zookeeper概述和基本概念
一.Zookeeper背景 随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致,在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的 ...
- 在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查
声明:百度以外的公司可以自由转载该文. 正如我上一篇博文提到,ADO这货和MFC没有任何关系,ADO 是一个独立的组件.所以为了使用ADO 我们就要把ADO引入到MFC中. ADO是硬盘上的表现形式是 ...
- 有按钮的ListView
有按钮的ListView 但是有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮.添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局文件上 ...
- Multiple encodings set for module chunk explatform "GBK" will be used by compiler
项目用idea启动的时候,突然报了个这个 Multiple encodings set for module explatform "GBK" will be used by co ...
- postgresql 建模文件 LDM 转成PDM 生成 SQL问题
LDM 转成 PDM (Tool --- GPDM ) 生成 SQL,查看全部SQL 详细步骤见下图. 1.postgresql 没有 VARCHAR2 只有 VARCHAR. 2.LDM 生成 PD ...
- idea 取消控制台的行数限制
有时候我们要输出大量的信息放到控制台显示,但是多了之后就出现最上面的信息被覆盖删除, 因此就需要设置控制台的显示行数,但在idea7之后的版本中,取消了对控制台行数设置选项, 只能通过更改配置文件进行 ...