2013-09-03 2 views
1

Может кто-нибудь объяснить, как (и зачем) использовать TeeSinkTokenFilter, от Lucene? Примером также будет очень признателен = P. Я не нашел official documentation очень понятным, а также просмотрел многие сайты, без особого прогресса. Спасибо.Lucene - Как использовать TeeSinkTokenFilter?

ответ

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, как я уже говорил выше.

Смежные вопросы