Lucene.Net 2.3.1版变化之TokenStream(搞笑了)

时间:2022-04-21 03:09:32

自己做分词,一般选择继承Tokenizer类。在以前的版本中只需要重写Next()方法就可以了。这个类比较简单,而塔的父类TokenStream则更加简单了,和接口没什么两样:

 

// 2.1版
public   abstract   class  TokenStream
    {
        
///   <summary> Returns the next token in the stream, or null at EOS.  </summary>
         public   abstract  Token Next();
        
        
///   <summary> Releases resources associated with this stream.  </summary>
         public   virtual   void   Close()
        {
        }
    }

 

 

到了2.3.1版本中,这个抽象类发生了很多变化.下面是2.3.1版的TokenStream类代码。

 

Lucene.Net 2.3.1版变化之TokenStream(搞笑了)Lucene.Net 2.3.1版变化之TokenStream(搞笑了)Code

 

 

可以看到,2.3.1版本中多了一个Reset方法和一个Next方法的重载。

在它的子类中重写了Reset和Close方法,但是Next方法没有变化。

 

Lucene.Net 2.3.1版变化之TokenStream(搞笑了)Lucene.Net 2.3.1版变化之TokenStream(搞笑了)Code

 

如果,你建立一个类,继承自Tokenizer类,然后,这个时候你做其他事情去了,然后等你回来,你写了调用的代码,嘿嘿,问题来了。会报一个堆栈溢出错误。而你根本不知道这个错误是怎么产生的。这个父类写得太不厚道了,虽然Next方法是必然被重写掉的。