深入浅出 jackrabbit 七 文本提取(下)
2009-09-17 00:00:00 来源:WEB开发网接上文,说到文本提取,在上一篇文章中,我们是管中窥豹,并没有把握住整体的流程,那么这篇文章就是用来弥补上一篇文章的不足的。
我们已经明确的知道,有一个队列,它的名字叫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);
}
};
}
}
Tags:深入浅出 jackrabbit 文本
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接