WEB开发网
开发学院软件开发Java 深入浅出 jackrabbit 六 文本提取(上) 阅读

深入浅出 jackrabbit 六 文本提取(上)

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 在上面的这个方法中,我们看到在TextExtractorJob这个线程类内部还有一个线程类,深入浅出 jackrabbit 六 文本提取(上)(4),就是cmd,而且这个线程类有一个奇怪的地方,那么这个操作是什么时候做的呢?这就需要我们回到addBinary方法,看看它是怎么用这个TextExt

在上面的这个方法中,我们看到在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); 
    } 
  }

上一页  1 2 3 4 5 6 7 8  下一页

Tags:深入浅出 jackrabbit 文本

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接