【本文基于对此英文网页的理解http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters】
概览
当对一个文档(document是一系列field的集合)进行索引时,其中的每个field(document和file都是lucene中的概念)中的数据都会经历分析,分词和多步的分词过滤等操作。这一系列的动作是什么呢?直观的理解是,将一句话分成单个的单词,去掉句子当中的空白符号,去掉多余的词,进行同义词代换等等。
【例】what a beautiful day? 会进行什么处理呢?what ,a 以及问号都将被去掉,最后处理结果为beautiful和day(也有可能是beautiful day)。
不仅仅是在索引的时候进行这些工作,查询的时候也要做这些工作,而且通常索引和查询使用同样的方法来进行处理。这样做的目的是为了保证索引与查询的正确匹配。下例说明了采取不同的处理时的不匹配情况。
【例】ABCD索引分词为AB CD,查询时候分词为ABC D,显然查询的匹配结果为0。
词性转换
一种是将一个词扩展成它的多种形式,例如将run扩展成runs,running。另外一种是词性规约,例如将runns,running等都“收缩”成run。前者只需要在索引或查询的任意一端采用即可,后者需要在两端同时采用。
分析器(Analyzer)
分析器是包括连个部分:分词器和过滤器。分词器顾名思意就是将句子分词单个的词,过滤器就是对分词的结果进行筛选,例如中文中将“的”“呀”这些对句子主体意思影响不大的词删除。英语中类似的就是"is","a"等等。通常在索引和分词两端应该采用同样的分词器。solr自带了一些分词器,如果你需要使用自己公司的分词器,那么就需要修改solr模式(Solr schema)。
schema.xml 文件允许两种方式修改文本被分析的方式,通常只有field类型为 solr.TextField 的field的内容允许定制分析器。
方法一:使用任何 org.apache.lucene.analysis.Analyzer的子类进行设定。
1. fieldtype name="nametext" class="solr.TextField">
2. <analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
3. </fieldtype>
方法二:指定一个TokenizerFactory ,后面跟一系列的TokenFilterFactories(它们将按照所列的顺序发生作用),Factories被用来创建分词器和分词过滤器,它们用于对分词器和分词过滤器的准备配置,这样做的目的是为了避免the overhead of creation via reflection。
1. <fieldtype name="text" class="solr.TextField">
2. <analyzer>
3. <tokenizer class="solr.StandardTokenizerFactory"/>
4. <filter class="solr.StandardFilterFactory"/>
5. <filter class="solr.LowerCaseFilterFactory"/>
6. <filter class="solr.StopFilterFactory"/>
7. <filter class="solr.PorterStemFilterFactory"/>
8. </analyzer>
9. </fieldtype>
需要说明的一点是,Any Analyzer, TokenizerFactory, or TokenFilterFactory 应该用带包名的全类名进行指定,请确保它们位于Solr的classpath 路径下。对于 org.apache.solr.analysis.* 包下的类,仅仅通过solr.*就可以进行指定。
如果你需要使用自己的分词器和过滤器,你就需要自己写一个 factory ,它必须是 BaseTokenizerFactory 或BaseTokenFilterFactory的子类。就像下面一样。
public class MyCustomFilterFactory extends BaseTokenFilterFactory {
public TokenStream create(TokenStream input) {
return new MyCustomFilter(input);
}
}
Solr提供了哪些TokenizerFactories?
--------------------------------------------------------------------
1. solr.LetterTokenizerFactory
创建org.apache.lucene.analysis.LetterTokenizer.
分词举例:
"I can't" ==> "I", "can", "t"
2. solr.WhitespaceTokenizerFactory
创建org.apache.lucene.analysis.WhitespaceTokenizer
3. solr.LowerCaseTokenizerFactory
创建org.apache.lucene.analysis.LowerCaseTokenizer
分词举例:
"I can't" ==> "i", "can", "t"
4. solr.StandardTokenizerFactory
创建org.apache.lucene.analysis.standard.StandardTokenizer
分词举例: "I.B.M. cat's can't" ==>
ACRONYM: "I.B.M.", APOSTROPHE:"cat's", APOSTROPHE:"can't"
说明:该分词器,会自动地给每个分词添加type,以便接下来的对type敏感的过滤器进行处理,目前仅仅只有StandardFilter对Token的类型是敏感的。
声明:原创文章,严禁转载。
分享到:
相关推荐
-- 同上,也可以添加其他查询分析器过滤器 --> ``` 这里,我们定义了一个名为`text_ik`的字段类型,使用了`HMMChineseTokenizerFactory`,这是一种基于隐马尔科夫模型(HMM)的中文分词器。 5. **更新字段...
Solr的核心功能是建立索引和执行查询,通过插件机制,可以灵活地扩展各种分析器和过滤器,以适应不同语言和应用场景的需求。 二、中文分词的重要性 中文分词是自然语言处理中的基础步骤,对于搜索引擎而言,正确的...
同时,可以通过Solr的分析器工具(Analysis UI)来实时查看分词效果,方便调试和优化。 总的来说,Solr分词器是构建高效、精准的全文搜索引擎不可或缺的一部分。选择合适的分词器并进行适当的配置,能够极大地提升...
在Solr中,拼音分词主要依赖于特定的分析器和过滤器。这些组件在索引和查询阶段处理文本,将汉字转化为拼音,以便于匹配。例如,"北京大学"会被转化为"bei da xue jia"。Solr 提供了若干种实现这个功能的插件,如...
-- 查询分析器也可以添加过滤器 --> ``` 文件`ikanalyzer-solr5`可能是一个包含IK分词器的Solr插件包,用于Solr 5版本,虽然与标题中的Solr 6.5不完全匹配,但在实际应用中,IK分词器的版本通常与Solr版本保持...
### Solr分词器使用手册知识点详解 #### 一、Solr概述 - **定义**:Solr是一款基于Java开发的、由Apache基金会维护的顶级开源项目,它是一款高性能的全文检索服务器。Solr不仅继承了Lucene的核心索引与搜索能力,还...
IK分词器提供了扩展接口,允许开发人员根据需求定制自己的过滤器或分词策略。 - **热更新** 使用IK分词器的热更新功能,可以在不重启Solr的情况下动态加载新词库,提高系统的灵活性。 总结来说,集成和使用IK...
在Solr中,分词器(Analyzer)和过滤器(Filter)共同作用于输入文本,完成诸如分词、去除停用词、词形还原等任务,以便提高搜索质量和效率。 **Solr分词器配置** 配置Solr分词器主要涉及以下几个步骤: 1. **...
3. 在Solr的配置文件中,如`solrconfig.xml`,确保分词相关的过滤器和分析器已经正确配置。 4. 重启Solr服务,使配置生效。 5. 创建或者更新Solr的索引,让新的分词器对文本进行处理。 通过以上步骤,你就可以在...
6. **测试分词**:通过Solr的分析器接口或者日志输出,可以检查分词效果,确保ikanalyzer正常工作。 7. **使用教程**:如果遇到任何问题,可以参考压缩包内提供的使用教程,按照步骤进行操作,通常会有详细的配置和...
2. 分词器(Tokenizer)、过滤器(Filter)和字符过滤器(CharFilter)的作用和工作流程。 3. 如何在Solr中配置和使用自定义分词器,如IK Analyzer。 4. 分词器的源码阅读和理解,以进行定制或优化。 5. 开发工具的...
用户可以通过修改或添加词典文件来优化分词效果,也可以编写自定义的过滤器或扩展词典格式。源码中会有相关的接口和类供开发者参考。 7. **打包成JAR**: 解压后的源码需要通过Maven或其他构建工具(如Gradle)...
- 根据实际需求调整 IK 分词器的配置参数,如启用/禁用某些过滤器,设置自定义词汇表等。 **IK 分词器的特性** - 支持动态加载自定义扩展词典,便于进行个性化的分词处理。 - 内置了英文分词,对于混合中英文的...
Ik分词器(IK Analyzer)是一个专门为Java设计的中文分词库,广泛应用于Solr和Elasticsearch等搜索引擎中。 标题中的"solr(ik分词器)需要的jar包"指的是为了在Solr中使用IK分词器,我们需要下载并添加相应的Java ...
1. **下载与解压**:获取ik-analyzer-7.5.0.jar文件,解压缩后将jar包放入Solr的lib目录下,确保Solr运行时能加载到该分词器。 2. **配置Solr schema.xml**:在Solr的schema.xml文件中,定义字段类型(fieldType),...
- 在Solr的schema.xml中配置分析器,指定使用IKAnalyzer,并可自定义参数,如是否开启动态扩展等。 3. **使用与优化**: - 对于特定领域或行业,可以通过扩展词典来提升分词效果,增加专业术语。 - 考虑使用...
Solr是一款强大的全文搜索引擎服务器,而IKAnalyzer是针对中文的开源分词器,广泛应用于Solr和Elasticsearch等搜索引擎中。IKAnalyzer的设计目标是提供一个灵活且易扩展的中文分词解决方案,以满足不同场景下的分词...
本文将深入探讨"mlcsseg"项目,它是一个针对Solr的开源分词器解决方案,其中包括了IK分词器和ANSJ分词器,以及各种过滤器和动态加载词库功能。以下是对这些知识点的详细说明: 1. **Solr分词器**:Solr是Apache ...
1. 配置索引:在Solr配置文件中定义字段类型(field type),指定对应的分词器和过滤器。 2. 导入数据:使用Solr的DataImportHandler(DIH)从数据库或其他数据源导入数据。 3. 分词索引:Solr会自动对导入的数据...