一、简介
分析器是solr中一个很重要的组件,在建立索引、搜索出想要的结果时,发挥了非常大的作用,这是solr已经定义好的一段包含分析器的fieldType示例
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EnglishPossessiveFilterFactory"/> <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> <filter class="solr.PorterStemFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EnglishPossessiveFilterFactory"/> <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> <filter class="solr.PorterStemFilterFactory"/> </analyzer> </fieldType>
1.分析器(Analyzer)
告诉Solr在建立索引和搜索的时候,如何处理文档内容,类型(type)一般为index或query
2.分词器(Tokenizer):
如何将一段完整的内容拆分成单独的词或词组,solr中定义了很多带分析器的文本类型,但中文的需要自己定义,目前有很多优秀的中文分词器(mmseg4j、IK等)
3.过滤器(Filter)
进过Tokenizer处理后,后续处理的组件,比如全转成小写等
4. Why?
为什么要用分词,以查询一段文字“詹姆斯:NBA巨星,首轮状元秀,绰号小皇帝。”(对应的field未定义任何的分词器),我们如果查询“状元秀”,是查不到这条记录的,当然你说可以加通配符,但是如果我们还要做高亮显示查询的这个词呢?
这时如果我们将对应字段的类型加上index分词器,在建立索引时就会对内容进行合适的拆分,查询时也会对查询字符串进行分词拆分,这样即使我们查询“小皇帝状元秀”也可以获得我们想要的结果
二、分析器的配置(中文分词mmseg4j的配置)
这里我solr的版本是6.5.0,mmseg4j的版本是2.4.0
1. 常用中文分词介绍
paoding:支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载
mmseg4j:自带sogou词库,支持名为 wordsxxx.dic, utf8文本格式的用户自定义词库,一行一词。不支持自动检测。 -Dmmseg.dic.path
IK:支持api级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码,/r/n 分割。不支持自动检测。
2.mmseg4j分词器配置
将下载好的mmseg4j包导入到solr的WEB-INF/lib下,并在schema配置文件中添加以下内容:
<fieldType name="text_mmseg4j_Complex" class="solr.TextField"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/> </analyzer> </fieldType>
将之前定义的core_test中short_desc字段定义为text_mmseg4j_Complex类型,重建索引后,我们查询"状元秀小皇帝",只返回了一条记录
{ "responseHeader" : { "status" : 0, "QTime" : 2, "params" : { "q" : "short_desc:状元秀小皇帝", "indent" : "on", "wt" : "json", "_" : "1493135606415" } }, "response" : { "numFound" : 1, "start" : 0, "docs" : [{ "name" : "LeBron James", "id" : "12b3e4b030314f55a89006769b8b743a", "short_desc" : "NBA巨星,首轮状元秀,克里夫兰骑士队当家球星,3届总冠军得主,场上司职小前锋,绰号“小皇帝”", "age" : 32, "tags" : ["小皇帝", "吾皇"], "_version_" : 1565666158942617600 }] } }
用提供的分析器页面也可以看到分词的结果比原来用标准分词器(完全拆成了一个个的汉字,而忽了语义)更符合自然意义
//mmseg4j基于正向最大匹配,分词结果 MMST 状元 秀 小 皇帝
3.mmseg4j的三种模式区别
mmseg4j涉及到了Simple、Complex、max-word三种分词方法,前两个都是基于正向最大匹配,第三种是在Complex算法基础上实现的最多分词方法。
1)正向最大匹配:就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则进行下一轮匹配,直到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再进行匹配,如此反复。
2)三种模式分词实例
原字符串:阿根廷足球巨星
Simple、Complex分词结果:阿根廷 足球巨星
Max-Word分词结果:阿 根 廷 足球 巨星
三.自定义词库
可能注意到前面tokenizer配置了dicPath属性(dic),这里是指定自定义词库的目录,可以是绝对路径也可以是现对路径,相对路径为"{solr.home}/core_name/词库目录",词库文件words开头并以".dic"结尾,如words-myown.dic。
注意,如果你的词库文件也是words.dic会覆盖对应solr-core.jar包中预定义的词库文件。
1.动态加载词库
通过一个简单的配置就可以让mmseg4j动态加载词库
首先在solrconfig.xml中配置一个requestHandler,其中dicPath和fieldType配置的dicPath属性值相同
<requestHandler name="/mmseg4j" class="com.chenlb.mmseg4j.solr.MMseg4jHandler" > <lst name="defaults"> <str name="dicPath">dic</str> </lst> </requestHandler>
然后我们就可以通过URL(http://localhost:10001/solr/core_test/mmseg4j?reload=true)来通知其重新加载词库
相关推荐
ikanalyzer分词器是一款在Java环境下广泛使用的中文分词工具,尤其在搜索引擎和文本分析领域中扮演着重要角色。它的核心是ikanalyzer.jar类库,这个库包含了分词算法和其他必要的支持类,使得开发者能够轻松地集成到...
在配置Solr以使用IKAnalyzer时,你需要在Solr的`solrconfig.xml`中指定分析器,并将上述文件放在正确的目录下。例如,你可以这样配置分词器: ```xml <analyzer type="index"> <tokenizer class="org.wltea....
**ik-analyzer中文分词器详解** 在信息技术领域,尤其是搜索引擎和自然语言处理中,中文分词是一项至关重要的任务。由于中文句子没有明显的空格来区分词汇,因此需要专门的工具来实现分词,以便更好地理解和分析...
**IKAnalyzer分词器**是Java开发的一款高性能的中文分词工具,主要应用于搜索引擎和文本分析领域。它的设计目标是提供一个轻量级、高效能的解决方案,支持自定义词典,可以方便地集成到各种系统中。在本资源中,我们...
在构建和优化中文搜索引擎或文本分析系统时,中文分词是一个至关重要的环节。"ik-analyzer-8.3.0分词插件.zip" 文件提供了一个解决方案,它是一款专为Solr设计的中文分词插件,使得Solr能够处理中文文档的分词任务。...
7. **实战应用**:IKAnalyzer在新闻网站、电子商务平台、社区论坛等需要处理大量中文文本的场景中广泛应用,通过精确的分词可以提升用户的搜索体验,增加用户满意度。 总之,配置IKAnalyzer智能分词对于提升Solr在...
IKAnalyzer是一款基于Java实现的开源中文分词器,主要应用于搜索引擎和文本分析领域。它是由尹国平(iK)发起并维护的项目,旨在提供一个高效且易用的中文分词解决方案。IKAnalyzer支持自定义扩展字典,允许用户根据...
**IKAnalyzer分词源码详解** IKAnalyzer是一款广泛使用的开源中文分词器,它主要针对Java平台设计,具有良好的性能和扩展性。该分词器适用于各种文本处理场景,如搜索引擎构建、信息检索、文本挖掘等。其核心在于...
ikanalyzer 是一个专门为Java开发的中文分词器,它基于 Lucene 库,适用于各种文本处理和搜索引擎场景。在 Solr 环境中,ikanalyzer 的作用是为中文文档提供精确的分词服务,从而提升搜索质量和效率。Solr8.4.0 是 ...
"ikanalyzer-solr5"看起来是一个针对Solr 5版本的IK Analyzer分词器。IK Analyzer是一款开源的、适用于Java环境的中文分词器,广泛应用于搜索引擎、日志分析等领域。它支持自定义词典和灵活的分词策略,能较好地处理...
标签中的"ik-ana"是Ik Analyzer的简称,"solr 中文分词"强调了这个分词器在Solr中的应用场景。文件列表中的"ik-analyzer-7.5.0.jar"即是我们需要集成到Solr中的核心组件。 总之,Ik Analyzer 7.5.0是Solr处理中文...
IKAnalyzer是一款针对中文处理的开源分词工具,广泛应用于搜索引擎、信息检索系统、文本挖掘等领域。它是基于Java语言开发的,能够很好地与Lucene、Solr等全文检索框架集成,提供高效的中文分词能力。 首先,我们要...
1. 在Solr的Schema.xml或managed-schema文件中,定义字段类型(fieldType)时,指定ikanalyzer作为分析器(analyzer): ```xml <fieldType name="text_ikanalyzer" class="solr.TextField"> <analyzer type="index...
在Solr6.0及以上版本中,为了更好地支持中文分词,我们可以配置IKAnalyzer(智能中文分析器)。IKAnalyzer是一个专门针对中文的开源分词器,设计目标是提供一个灵活且易扩展的中文分词组件。 **IKAnalyzer简介** IK...
可以通过分析器预览分词结果。 - 根据实际需求调整IK Analyzer的配置,比如自定义词典、停用词等。 6. **监控和维护** - 对Solr的查询性能进行监控,观察分词效果和索引构建速度,根据实际情况进行调优。 集成IK...
同时,需要在`solr/solrconfig.xml`中配置分析器为IKAnalyzer。 ```xml <analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> </analyzer> <analyzer type="index"> ...
Solr中的IKAnalyzer分词器是处理中文文本的关键组件,它能有效提升搜索质量和效率。通过对`schema.xml`的配置,我们可以定制化分词策略,以满足具体业务的需求。IKAnalyzer 2012FF_hf1版本的出现,旨在提供更快更...
**ik_analyzer中文分析器** 是一款专门为处理中文文本而设计的开源分词工具,它在Solr和Elasticsearch等搜索引擎中广泛应用。这个标题提到的是适用于Solr 6版本及以下的ik_analyzer分析器,表明这个压缩包提供了一个...
在Solr的配置中,我们可以将IKAnalyzer作为默认的分析器,对输入的中文文本进行预处理,从而提高查询的精确度和召回率。 **配置过程:** 1. **下载与安装**:首先,从官方仓库或第三方资源获取ikanalyzer-solr5的...
这款分词器以其灵活、高效的特性,成为了许多Java开发者处理中文文本的首选工具。本文将深入探讨IK Analyzer 2012FF_hf1_source的源码,揭示其工作原理与关键实现,帮助开发者更好地理解和定制分词器以适应特定业务...