深入浅出 jackrabbit 六 文本提取(上)
2009-09-17 00:00:00 来源:WEB开发网在上面的这个方法中,我们看到在TextExtractorJob这个线程类内部还有一个线程类,就是cmd,而且这个线程类有一个奇怪的地方,cmd这个线程的run方法中其实是执行一个Callable接口的实现类(这个逻辑写在了setter(Callable cc)中)。cmd的逻辑其实就是执行真正的文本提取操作。而TextExtractorJob的run方法其实就是执行cmd的run方法。也就是说 cmd作为一个线程类实现压根没有被真正的作为一个线程启动过,所以cmd定义为runnable只是给人多一份疑惑,其他作用没有看出来。
创建完TextExtractorJob之后,就要用它来创建TextExtractorReader。我们看看TextExtractorReader的构造方法:
Java代码
TextExtractorReader(TextExtractorJob job, Executor executor, long timeout) {
this.job = job;
this.executor = executor;
this.timeout = timeout;
}
很简单,什么都没有,也就是说在这个操作的过程中,并没有触发文本提取的操作,那么这个操作是什么时候做的呢?这就需要我们回到addBinary方法,看看它是怎么用这个TextExtractorReader类的:
doc.add(createFulltextField(reader));
原来是又调用了createFulltextField方法,那么我们得进去看一下,说不定触发文本提取的操作就在这里哦:
Java代码
protected Fieldable createFulltextField(Reader value) {
if (supportHighlighting) {
return new LazyTextExtractorField(FieldNames.FULLTEXT, value, true, true);
} else {
return new LazyTextExtractorField(FieldNames.FULLTEXT, value, false, false);
}
}
Tags:深入浅出 jackrabbit 文本
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接