Token: 如果一个字段被token化,这表示它经过了一个可将内容转化为tokens串的分析程序。 Token是建立索引的基本单位,表示每个被编入索引的字符。 在token化的过程中,分析程序会在使用任何转换逻辑(例如去掉 "a” 或 "the" 这类停用词,执行词干搜寻,将无大小写区分的所有文字转换成小写等)的同时,抽取应被编入索引的文本内容。由于和字段相关的内容减少到只剩核心元素,因此,索引作为与某个字段相关的文字内容,它的规模也被缩小了。只有被token化的字段也将被编入索引的情况下才有意义。 对Akamai.com来说,“标题”被token化,所以Lucene不用搜寻如 "a" 或 "the" 这类单词。

 
  1. public final class Token {   
  2.   String termText;      // the text of the term   
  3.   int startOffset;      // start in source text   
  4.   int endOffset;        // end in source text   
  5.   String type = "word"; // lexical type   
  6.   
  7.   private int positionIncrement = 1;   
  8.   
  9.   public Token(String text, int start, int end)   
  10.   
  11.   public Token(String text, int start, int end, String typ)   
  12.   
  13.   public void setPositionIncrement(int positionIncrement)   
  14.   
  15.   public int getPositionIncrement() { return positionIncrement; }   
  16.   
  17.   public final String termText() { return termText; }   
  18.   
  19.   public final int startOffset() { return startOffset; }   
  20.   
  21.   public void setStartOffset(int givenStartOffset)   
  22.   
  23.   public final int endOffset() { return endOffset; }   
  24.   
  25.   public void setEndOffset(int givenEndOffset)   
  26.   
  27.   public final String type() { return type; }   
  28.   
  29.   public String toString()   
  30.   
  31.  }  
public final class Token { String termText; // the text of the term int startOffset; // start in source text int endOffset; // end in source text String type = "word"; // lexical type 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(迭代器)

 

 

 
  1. public abstract class TokenStream {   
  2.   public abstract Token next() throws IOException;   
  3.   public void close() throws IOException {}   
  4. }  
public abstract class TokenStream { public abstract Token next() throws IOException; public void close() throws IOException {}}



Tokenizer继承自TokenStream,其输入为Reader

Java代码  
  1. public abstract class Tokenizer extends TokenStream {   
  2.   protected Reader input;   
  3.   protected Tokenizer() {}   
  4.   protected Tokenizer(Reader input) {   
  5.     this.input = input;   
  6.   }   
  7.   
  8.   public void close() throws IOException {   
  9.     input.close();   
  10.   }   
  11. }  
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变为小写等。

  
  1. public abstract class TokenFilter extends TokenStream {   
  2.   protected TokenStream input;   
  3.   protected TokenFilter() {}   
  4.   protected TokenFilter(TokenStream input) {   
  5.     this.input = input;   
  6.   }   
  7.   
  8.   public void close() throws IOException {   
  9.     input.close();   
  10.   }   
  11. }  
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工厂

  
  1. public abstract class Analyzer {    
  2.   public TokenStream tokenStream(String fieldName, Reader reader){   
  3.       return tokenStream(reader);   
  4.   }   
  5.   
  6.   public TokenStream tokenStream(Reader reader){   
  7.       return tokenStream(null, reader);   
  8.   }   
  9. }  
public abstract class Analyzer { public TokenStream tokenStream(String fieldName, Reader reader){ return tokenStream(reader); } public TokenStream tokenStream(Reader reader){ return tokenStream(null, reader); }}