深入浅出 jackrabbit 二 索引概览
2009-09-17 00:00:00 来源:WEB开发网这段代码很简单,把原来的两个iterator作了一个decorator,也就是说在原有的iterator的功能上又添加了一些功能,代码虽然很简单,但是却很重要,尤其是在处理那些需要add的node上,在第二个decorator中,有一个next方法,这个方法包含着创建index的主要逻辑:创建属于这个node的document对象。为node创建document是索引过程中第一个最重要的环节,这意味着,我们需要掌握一个 node中,哪些属性被建立索引,建了那些索引,这关乎到查询的范围,如果一个property不能被索引,那么在查询的时候就不能以它作为依据。
所以请大家记住createDocument这个方法,在后文中,我们会详细分析一个node有哪些field会被索引进文件。
所以到目前为止,我们已经得知了index流程的前面三个步骤
Java代码
1. 调用index流程的两个入口
2. 监听器解析event,并生成两个iterator
3. Decorate两个iterator,目的是override其next方法,并将在next方法中创建document。
接着,我们进入到index.update()方法,index对象是MultiIndex类的实例,对于update方法来说,无论用什么言语来描述它的重要性都不为过,因为在这个方法中,我们会看到jackrabbit建立索引的核心流程,但是我们需要知道的是,它并不包含任何细节,细节隐藏在流程的其他对象中:
//请注意方法前的synchronized,这个同步非常重要,因为他能控制一个非//常重要的流程的顺序执行。
Java代码
synchronized void update(Iterator remove, Iterator add) throws IOException {
synchronized (updateMonitor) {
updateInProgress = true;
}
try {
long transactionId = nextTransactionId++;
executeAndLog(new Start(transactionId));
boolean flush = false;
//从索引中删除需要删除的node
while (remove.hasNext()) {
executeAndLog(new DeleteNode(transactionId, (UUID) remove.next()));
}
//将需要增加的node的document加入到索引中去,这里的next
//方法就是上一个方法中定义的decorator中的next()方法,创建//document就是在此时
while (add.hasNext()) {
Document doc = (Document) add.next();
if (doc != null) {
executeAndLog(new AddNode(transactionId, doc));
// commit volatile index if needed
flush |= checkVolatileCommit();
}
}
executeAndLog(new Commit(transactionId));
// flush whole index when volatile index has been commited.
if (flush) {
flush();
}
} finally {
synchronized (updateMonitor) {
updateInProgress = false;
updateMonitor.notifyAll();
if (multiReader != null) {
multiReader.close();
multiReader = null;
}
}
}
}
从代码的注释,我们可以看到这段代码的主要功能,就是把该删的删掉,该加的加进去,然后该flush就flush,最后方法退出。那么代码的主要逻辑在哪里呢?
在DeleteNode和AddNode类中,还有就是在flush方法中。
看上去很简单了,但是这只是看上去简单而已,就到目前为止,这个以上流程的主要工作还停留在如何准备索引数据:即document,接着就是短短几行代码来描述如何使用document,
不过再继续下去之前,我们得回头看看createDocument中究竟有哪些field被创建,究竟node中有哪些信息被放到索引中了呢,同时我们将会看到如何通过修改field的属性来降低高亮功能所带来的时间消耗,to be continue。
Tags:深入浅出 jackrabbit 索引
编辑录入:爽爽 [复制链接] [打 印]- ››深入浅出实战攻防恶意PDF文档
- ››深入浅出ShellExecute
- ››深入浅出URL编码
- ››深入浅出Java多线程程序设计
- ››深入浅出 jackrabbit 八 索引合并(上)
- ››深入浅出 jackrabbit 九 索引合并(下)
- ››深入浅出 jackrabbit 十 redolog 和 recovery.doc...
- ››深入浅出 jackrabbit 十一 jackrabbit改进要点
- ››深入浅出 jackrabbit 十二 key-value存储系统
- ››深入浅出 jackrabbit 十三 查询之AST和QT
- ››深入浅出 jackrabbit 一
- ››深入浅出 jackrabbit 二 索引概览
更多精彩
赞助商链接