Token: 如果一个字段被token化,这表示它经过了一个可将内容转化为tokens串的分析程序。 Token是建立索引的基本单位,表示每个被编入索引的字符。 在token化的过程中,分析程序会在使用任何转换逻辑(例如去掉 "a” 或 "the" 这类停用词,执行词干搜寻,将无大小写区分的所有文字转换成小写等)的同时,抽取应被编入索引的文本内容。由于和字段相关的内容减少到只剩核心元素,因此,索引作为与某个字段相关的文字内容,它的规模也被缩小了。只有被token化的字段也将被编入索引的情况下才有意义。 对Akamai.com来说,“标题”被token化,所以Lucene不用搜寻如 "a" 或 "the" 这类单词。
- public final class Token {
- String termText;
- int startOffset;
- int endOffset;
- String type = "word";
-
- private int positionIncrement = 1;
-
- public Token(String text, int start, int end)
-
- public Token(String text, int start, int end, String typ)
-
- public void setPositionIncrement(int positionIncrement)
-
- public int getPositionIncrement() { return positionIncrement; }
-
- public final String termText() { return termText; }
-
- public final int startOffset() { return startOffset; }
-
- public void setStartOffset(int givenStartOffset)
-
- public final int endOffset() { return endOffset; }
-
- public void setEndOffset(int givenEndOffset)
-
- public final String type() { return type; }
-
- public String toString()
-
- }
TokenStream是用来走访Token的iterator(迭代器)
- public abstract class TokenStream {
- public abstract Token next() throws IOException;
- public void close() throws IOException {}
- }
Tokenizer继承自TokenStream,其输入为Reader
- public abstract class Tokenizer extends TokenStream {
- protected Reader input;
- protected Tokenizer() {}
- protected Tokenizer(Reader input) {
- this.input = input;
- }
-
- public void close() throws IOException {
- input.close();
- }
- }
TokenFilter继承自TokenStream,其作用是用来完成对TokenStream的过滤操作,譬如
去StopWords,将Token变为小写等。
- public abstract class TokenFilter extends TokenStream {
- protected TokenStream input;
- protected TokenFilter() {}
- protected TokenFilter(TokenStream input) {
- this.input = input;
- }
-
- public void close() throws IOException {
- input.close();
- }
- }
Analyzer就是一个TokenStream工厂
- public abstract class Analyzer {
- public TokenStream tokenStream(String fieldName, Reader reader){
- return tokenStream(reader);
- }
-
- public TokenStream tokenStream(Reader reader){
- return tokenStream(null, reader);
- }
- }
Analyzer的作用就是把文本分解为便于Lucene处理的token,好比人体的肠道,负责把食物分解成易于吸收的小块。
转自:http://ybzshizds.iteye.com/blog/562794
分享到:
相关推荐
在 Lucene 中,Analyzer 是核心组件之一,它的作用是对输入的原始文本进行预处理,将其转换成一系列的“语汇单元”(Tokens),这些语汇单元通常代表了文档中的关键词。Analyzer 的工作流程大致如下: 1. 首先,...
在Lucene中,索引包含了一系列经过分析和分词处理的文档,这些处理由Analyzer负责。Analyzer会将输入文本分解为Token,并且可以进行诸如去除停用词、词形还原等预处理操作,以提高搜索效率和准确性。 搜索过程中,...
1. 分词原理:了解Analyzer的工作流程,包括TokenStream、Tokenizer和Token的交互。 2. 索引构建:研究IndexWriter的使用,以及Segment和Merge策略。 3. 查询解析:探究QueryParser如何将查询字符串转化为Query对象...
- `Analyzer`: 分析器,负责将输入文本转换为Token流,包括分词、去停用词、词形还原等。 - `Tokenizer`: 生成Token的基本单元,根据语言规则将文本切割。 - `TokenFilter`: 对Token流进行进一步处理的过滤器,例如...
1. 分词器(Tokenizer):分词器是Lucene处理文本的第一步,负责将输入的字符串分解为一系列的词元(Token)。Lucene.Net包含多种预定义的分词器,如StandardAnalyzer用于英文,而ChineseAnalyzer适用于中文。 2. ...
在Lucene中,`Attribute`接口定义了一种方式来扩展Lucene的分析器(Analyzer)和TokenStream(分词流),而`TermAttribute`则实现了`Attribute`接口,专门用于表示一个分词(Term)。这个接口提供了对分词的基本属性...
例如,`Analyzer`类负责文本分析,其中的`TokenStream`接口和`Tokenizer`类是实现自定义分词策略的关键。`InvertedIndex`类则实现了倒排索引的构建和查询。 至于“工具”标签,Lucene作为一个工具库,可以与其他...
在Clucene的源码中,我们可以看到这些组件的具体实现,例如`TokenStream`接口定义了分词流的行为,`Analyzer`类负责整个分词过程,`IndexWriter`类处理索引的建立和更新,`IndexReader`用于读取索引,`QueryParser`...