TokenStream extends AttributeSource implements Closeable: incrementToken,end,reset,close Tokenizer直接继承至TokenStream,其输入input是一个reader TokenFilter也直接继承TokenStream,但input是一个TokenStream. TokenStreamComponents事实上是将tokenizer和tokenfilter包装起来的(也能够仅仅是tokenize…
  lucene中的TokenStream,TokenFilter之间关系   TokenStream是一个能够在被调用后产生语汇单元序列的类,其中有两个类型:Tokenizer和TokenFilter,两者的不同在于TokenFilter中包含了一个TokenStream作为input,该input仍然可以为一种TokenFilter进行递归封装,是一种组合模式:而Tokenzier接受一个Reader对象读取字符并创建语汇单元,TokenFilter负责处理输入的语汇单元,通过新增.删除或者…
分词器的核心类: Analyzer:分词器 TokenStream: 分词器做优点理之后得到的一个流.这个流中存储了分词的各种信息,能够通过TokenStream有效的获取到分词单元. 下面是把文件流转换成分词流(TokenStream)的过程 首先,通过Tokenizer来进行分词,不同分词器有着不同的Tokenzier,Tokenzier分完词后,通过TokenFilter对已经分好词的数据进行过滤,比方停止词.过滤完之后,把全部的数据组合成一个TokenStream:下面这图就是把一个re…
Lucene中Analyzer语句分析,利用lucene中自带的词法分析工具Analyzer,进行对句子的分析. 源代码如下: package com.test; import java.io.IOException; import java.io.StringReader; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.SimpleAnal…
学习一个库,最好去官网.因为很多库API变动十分大,从博客上找的教程都过时了. Lucene原理就是简简单单的"索引",以空间换时间.但是Lucene将这件事做到了极致,后人再有想写倒排索引的,只能算是练练手. Lucene的重要模块之一就是分析器模块,这个模块负责对输入文本进行一些处理,比如分词.去除停止词(如"的"."着")等琐碎操作. 这个模块产生的token,就相当于键,求token的哈希值,然后把文档id放到对应的桶中. 中文Analy…
通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就是指:将域(Field)文本转换成最基本的索引表示单元---项(Term)的过程.而项(Term)又是由语汇单元(Token)以及它所属的域名组合而成的. 在索引过程中存在分析(IndexWriter的初始化中需要放入一个Analyzer的实例:并且如果要使Analyzer生效,则需要使用Index…
Tokenizer Tokenizer 的工作是将文本流分解为令牌,其中每个令牌(通常)是文本中字符的子序列.分析器知道它配置的字段,但 tokenizer 不是.Tokenizers 从字符流(Reader)中读取并生成一系列令牌对象(TokenStream). 输入流中的字符可能被丢弃,如空格或其他分隔符.也可以添加或替换它们,例如将别名或缩写映射到规范化的窗体.令牌包含除文本值之外的各种元数据,例如字段中令牌出现的位置.由于 Tokenizer 可能会产生与输入文本不一致的标记,因此不应假…
http://blog.csdn.net/zhaoxiao2008/article/details/14180019 先看一段lucene3代码 Document doc = new Document(); doc.add(new Field("fullpath", f.getCanonicalPath(), Field.Store.YES, Field.Index.NOT_ANALYZED)) Field类是文档索引期间很重要的类,控制着被索引的域值 Field.Store.* 域存…
总算搞明白 lucene 中关于Store.YES  关于Store.NO的解释了 一直对Lucene Store.YES不太理解,网上多数的说法是存储字段,NO为不存储. 这样的解释有点郁闷:字面意思一看就明白,但是不解. 之前我的理解是:如果字段可以不存储,那要怎么搜索这个不存储的字段呢? 原来Lucene就是这样,可以设置某些字段为不存储,但是可以用来检索. 终于在一篇文章里看到这几句话,突然间就明白了. //Store.YES 保存 可以查询 可以打印内容 Field storeYes…
package com.jadyer.lucene; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.…