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

深入浅出 jackrabbit 七 文本提取(下)

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示:接上文,说到文本提取,深入浅出 jackrabbit 七 文本提取(下),在上一篇文章中,我们是管中窥豹,需要文本提取的document是会二进宫的,这个由消费者逻辑来控制的,并没有把握住整体的流程,那么这篇文章就是用来弥补上一篇文章的不足的

接上文,说到文本提取,在上一篇文章中,我们是管中窥豹,并没有把握住整体的流程,那么这篇文章就是用来弥补上一篇文章的不足的。

我们已经明确的知道,有一个队列,它的名字叫indexingqueue,它中存放的是待提取的document,下面我们就来看看它的生产者是谁:

1. 生产者

我们在前面的文章中提到过,VolatileIndex(内存数据)的pending队列中document数量超过10(默认值)的时候,会触发一个操作,一个多线程并发生成索引的数据,而且这个数据是存在于RamDirectory中,显然,当一个binary需要做文本提取的时候,应该也是在这个时候。我们来回顾一下,那个方法:

Java代码   

void addDocuments(Document[] docs) throws IOException { 
 
    final IndexWriter writer = getIndexWriter(); 
 
    DynamicPooledExecutor.Command commands[] = 
 
        new DynamicPooledExecutor.Command[docs.length]; 
 
    for (int i = 0; i < docs.length; i++) { 
 
      // check if text extractor completed its work 
 
/*尤其是要注意这个方法,这个方法预示着什么,到底是什么呢?这个方法预示着一个document在进入这个方法之前已经触发了文本提取的操作,奇怪哦,其实不奇怪,需要文本提取的document是会二进宫的,这个由消费者逻辑来控制的,不过还是让我们先来看看生产者的逻辑吧。*/ 
 
      final Document doc = getFinishedDocument(docs[i]); 
 
      // create a command for inverting the document 
 
      commands[i] = new DynamicPooledExecutor.Command() { 
 
        public Object call() throws Exception { 
 
          long time = System.currentTimeMillis(); 
 
          writer.addDocument(doc); 
 
          return new Long(System.currentTimeMillis() - time); 
 
        } 
 
      }; 
 
    } 
 
}
 

1 2 3  下一页

Tags:深入浅出 jackrabbit 文本

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