Java Lucene-如何使用TeeSinkTokenFilter?

Java Lucene-如何使用TeeSinkTokenFilter?,java,lucene,Java,Lucene,请任何人解释一下如何(以及为什么)使用Lucene提供的TeeSinkTokenFilter?举个例子,我也会非常感激=P。我没有发现太多的清晰,也查了很多网站,没有太多的进展。 谢谢。是的,我认为官方文件也不是很清楚。我认为它之所以如此令人困惑,部分原因是它将两个不同的特性放在一起演示,使得很难区分它们。让我看看我是否可以重写他们的例子来展示基本情况 TeeSinkTokenFilter source1 = new TeeSinkTokenFilter( new WhitespaceT

请任何人解释一下如何(以及为什么)使用Lucene提供的TeeSinkTokenFilter?举个例子,我也会非常感激=P。我没有发现太多的清晰,也查了很多网站,没有太多的进展。
谢谢。

是的,我认为官方文件也不是很清楚。我认为它之所以如此令人困惑,部分原因是它将两个不同的特性放在一起演示,使得很难区分它们。让我看看我是否可以重写他们的例子来展示基本情况

TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(
    new WhitespaceTokenizer(version, reader1));
TeeSinkTokenFilter.SinkTokenStream sink1 = source1.newSinkTokenStream();
TeeSinkTokenFilter.SinkTokenStream sink2 = source1.newSinkTokenStream();
source1.consumeAllTokens(); // all tokens get cached at this point

TokenStream final3 = new EntityDetect(sink1);
TokenStream final4 = new URLDetect(sink2);

d.add(new TextField("f3", final3, Field.Store.NO));
d.add(new TextField("f4", final4, Field.Store.NO));
这允许final3和final4令牌流共享source1完成的处理。正如官方文档所说,流的使用顺序很重要,但正如它没有说的那样,顺序似乎是不确定的(或者按字段名称的字母顺序)。我建议使用ConsumerAllTokens方法,如上所述