首页 > 代码库 > Lucene初识之Analyzer
Lucene初识之Analyzer
刚接触Lucene,虽然跑通了一个demo,但对很多东西还不了解。下面简单记录下对Analyzer的理解,以后再系统整理。后面来自Lucene官方文档,Lucene版本为4.10.0.欢迎感兴趣的同学一起学习交流,求大牛指导,我现在还有很多不明白的地方。
包org.apache.lucene.analysis
将文本转换为可索引和检索的标记标记(token)。
Lucene,建索引和检索的库,只接受纯文本。
文本解析(Parsing)
基于Lucene的搜索应用可能会支持很多格式的文档,如pdf、word、excel,xml等。Lucene不关心具体的文档格式。应用开发者应当提供合适的文本解析器,将不同格式的文档转换成纯文本的形式。
标记化(Tokenization)
将纯文本进行Lucene建索引的时候要经历一个通常称之为“标记化”的过程。标记化是将纯文本解析成小的索引单元——标记(token)的过程。文本被解析成标记的方式,与之后的检索过程关联性很强。例如,句子的开头和结尾可以被识别从而提供更精确的短语,提高搜索结果的准确性(虽然Lucene本身不支持句子的识别)。
有时,仅仅将输入的文本简单的解析成标记是不够的,可能需要进一步的分析(Analysis)。Lucene提供了前置和后置标记化分析组件。
前置标记化分析可以包括(但不限于)去HTML标记,转换或移除文本匹配的模式或固定字符串。
后置标记化有很多步骤(但不限于):
提干——提取词的主干部分,如bikes可以被替换为bike,查询bike的结果同时包含bike和bikes
过滤——英文中的the、a,汉语中的“的”等对检索结果可能并没有帮。去掉这些词可以减少索引空间,提高检索效率,或者降低噪音,从而提升搜索质量。
文本规范化——去除“口音”和其他字符标记从而更好的检索。
同义词扩展——在标记的位置添加同义词,在用户搜索同义词集的时候可能会更好的匹配。
核心解析(CoreAnalysis)
Lucene的Analysis包提供了将String和Reader转换成可索引的标记的原理,主要涉及四个类,分别是:
Analyzer——负责创建TokenStream,在索引和搜索过程中用到。
CharFilter——用来在Reader读取文本时,为前置标记化执行替换、删除或者添加操作。
Tokenizer——是一个TokenStream,用来将文本解析成标记,一般是Analysis的第一步。
TokenFilter——也是一个TokenStream,用来改变Tokenizer生成的一些标记。不是所有的Analyzer都需要TokenFilter。
Lucene初识之Analyzer