1

有人能解释一下如何(以及为什么)使用来自 Lucene 的 TeeSinkTokenFilter 吗?一个例子也将不胜感激=P。官方文档看的不是很清楚,也查了很多网站,没有太大进展。谢谢。

4

1 回答 1

0

是的,我认为官方文档也不是很清楚。我认为它如此令人困惑的部分原因在于它以一种难以区分的方式同时展示了两个不同的功能。让我看看我是否可以重写他们的示例以仅显示基本案例。

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 完成的处理。正如官方文档所说,消费流的顺序很重要,但正如它没有说的那样,顺序似乎是不确定的(或者可能按字段名称的字母顺序排列)。我建议像上面所做的那样使用 consumeAllTokens 方法。

于 2013-12-05T18:44:52.293 回答