Uwe, not so sure it doesn't need to be there, what about other consumers such as QueryParser?
On Sun, Nov 15, 2009 at 12:02 PM, Uwe Schindler <u...@thetaphi.de> wrote: > I checked again, reset() on the top filter does not need to be there, as > the indexer calls it automatically as the first call after > reusableTokenStream. For reusing only reset(Reader) must be called. It’s a > little bit strange that both methods have the same name, the reset(Reader) > one has a completely different meaning. > > > > ----- > Uwe Schindler > H.-H.-Meier-Allee 63, D-28213 Bremen > http://www.thetaphi.de > eMail: u...@thetaphi.de > ------------------------------ > > *From:* Uwe Schindler [mailto:u...@thetaphi.de] > *Sent:* Sunday, November 15, 2009 5:56 PM > > *To:* java-dev@lucene.apache.org > *Subject:* RE: Bug in StandardAnalyzer + StopAnalyzer? > > > > It should be there... But ist unimplemented in the TokenFilters used by > Standard/Stop Analyzer. Buf for consistency it should be there. I’ll talk > with Robert Muir about it. > > > > Uwe > > > > ----- > Uwe Schindler > H.-H.-Meier-Allee 63, D-28213 Bremen > http://www.thetaphi.de > eMail: u...@thetaphi.de > ------------------------------ > > *From:* Eran Sevi [mailto:erans...@gmail.com] > *Sent:* Sunday, November 15, 2009 5:51 PM > *To:* java-dev@lucene.apache.org > *Subject:* Re: Bug in StandardAnalyzer + StopAnalyzer? > > > > Good point. I missed that part :) since only the tokenizer uses the reader, > we must call it directly. > > So the reset() on the filteredTokenStream was omitted on purpose because > there's not underlying implementation? or is it really missing? > > On Sun, Nov 15, 2009 at 6:30 PM, Uwe Schindler <u...@thetaphi.de> wrote: > > It must call both reset on the top-level TokenStream and reset(Reader) on > the Tokenizer-. If the latter is not done, how should the TokenStream get > his new Reader? > > > > ----- > Uwe Schindler > H.-H.-Meier-Allee 63, D-28213 Bremen > http://www.thetaphi.de > eMail: u...@thetaphi.de > ------------------------------ > > *From:* Eran Sevi [mailto:erans...@gmail.com] > *Sent:* Sunday, November 15, 2009 5:19 PM > *To:* java-dev@lucene.apache.org > *Subject:* Bug in StandardAnalyzer + StopAnalyzer? > > > > Hi, > when changing my code to support the not-so-new reusableTokenStream I > noticed that in the cases when a SavedStream class was used in an analyzer > (Standard,Stop and maybe others as well) the reset() method is called on the > tokenizer instead of on the filter. > > The filter implementation of reset() calls the inner filters+input reset() > methods, but the tokenizer reset() method can't do that. > I think this bug hasn't caused any errors so far since none of the filters > used in the analyzers overrides the reset() method, but it might cause > problems if the implementation changes in the future. > > the fix is very simple. for example (in StandardAnalyzer): > > if (streams == null) { > streams = new SavedStreams(); > setPreviousTokenStream(streams); > streams.tokenStream = new StandardTokenizer(matchVersion, reader); > streams.filteredTokenStream = new > StandardFilter(streams.tokenStream); > streams.filteredTokenStream = new > LowerCaseFilter(streams.filteredTokenStream); > streams.filteredTokenStream = new > StopFilter(StopFilter.getEnablePositionIncrementsVersionDefault(matchVersion), > > streams.filteredTokenStream, stopSet); > } else { > streams.tokenStream.reset(reader); > } > > should become: > > if (streams == null) { > streams = new SavedStreams(); > setPreviousTokenStream(streams); > streams.tokenStream = new StandardTokenizer(matchVersion, reader); > streams.filteredTokenStream = new > StandardFilter(streams.tokenStream); > streams.filteredTokenStream = new > LowerCaseFilter(streams.filteredTokenStream); > streams.filteredTokenStream = new > StopFilter(StopFilter.getEnablePositionIncrementsVersionDefault(matchVersion), > > streams.filteredTokenStream, stopSet); > } else { > streams.filteredTokenStream.reset(); // changed line. > } > > > What do you think? > > Eran. > > > -- Robert Muir rcm...@gmail.com