`
ahuaxuan
  • 浏览: 639520 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
简介:在前面的文章中,ahuaxuan已经指出jackrabbit查询的主体流程,主体流程只能帮助大家稍微了解一下jackrabbit的query module,要深入理解还得深入探索主体流程中的每一步。在这篇文章中ahuaxuan将着重描述AST的生成和QT(querynode tree ...
作者:ahuaxuan        在写文章方面,惰性心理无时无刻不折磨着我,文章的标题已经列在那里很长时间,可是我就是不愿意打开,不愿意把心中所想描绘出来。类似的情况可能也折磨着很多的其他同学。虽然jackrabbit是一个小众的框架,看的人和想看的人非常的少,但是其中确实包含了很多值得我们学习和研究的技术和实现,当然也有很多不足,需要我们去改进。所以我强迫自己继续写下去。        上一篇文章讲到高亮和及时搜索的问题,在文章的最后我也提出了一些问题,就是如果将高亮去掉,那么势必会带来一个问题,那就是小文本文件的存储问题,一般有大型网络经验的人都知道,小文本存储在磁盘上,读取性能是非 ...
作者,ahuaxuan 在看过前面的一系列文章之后,对于jackrabbit,我们脑海里应已经有了一幅比较清晰的图。接下来我们要思考的是如何提高搜索模块的性能。其中涉及到如何正确的使用lucene,如何让搜索模块专注的做它应该做的事 ...
作者:ahuaxuan 在前面的文章中,我们对jackrabbit做索引的流程有了较为深刻的认识,这个过程中包含了很多的特性,比如多线程作内存索引啊,文件系统的目录算法啊,文本提取的策略等等,在本文中,ahuaxuan将会继续描述jackrabbi ...
开篇     此文章的题目来自于当下的两哥之争,本意有调侃之意,但是用在本文,却无此意,我以十分真诚并且后知后觉的态度认定,p2p是未来的主要计算模型。尤其是在视频音频领域,但是将来,p2p一定会拓展到普通的计算上。     要解释清楚这个问题,我们得从当下最流行的音频视频p2p软件聊起。先来说说较为简单的一个音频p2p软件,酷狗。     酷狗的原型应该是来自于一个国外的公司,名字我已忘记,那家公司也是通过mp3的p2p下载作为主要业务,不过可惜的是在美国mp3因为版权问题非常严重,所以那家公司的最终结局只有一个,就是关门。     但是在中国就不一样了,版权问题没有这么严重,或者说相 ...
在上文中,ahuaxuan讲到了索引创建的主体流程,但是索引合并其实还有一个较为重要的细节ahuaxuan没有详细阐述。本文中,ahuaxuan将会详细阐述这个问题          本文分成两部分内容          1  考虑应用拓机时的数据正确性问题。          2  jackrabbit是如何解决这些问题的。            而这个细节将会直接影响我们对query module的改造,这个细节虽然不难,但是却很重要,是jackrabbit中一个比较重要的设计。下面让我们一起来看看这个是什么样的细节。            回顾上文,我们知道一个目录合并的主要 ...
我们从文本提取的逻辑中走出来,回到主体流程。 在前面的文章中,我们可以看到一次索引创建的操作,可能会产生多个 persistentindex 对象,而这些对象其实代表着一个索引目录。随着创建索引的次数越来越多,那么索引目录也在增多,但是索引目录中的数据却不是很多,所以我们需要把多个目录合并,其实也就是索引的合并。   执行这个操作的类是 IndexMerger ,看其定义为: class IndexMerger extends Thread implements IndexListener /*由此可见它是一个线程,并且同时充当着listener的角色,看看 ...
接上文,说到文本提取,在上一篇文章中,我们是管中窥豹,并没有把握住整体的流程,那么这篇文章就是用来弥补上一篇文章的不足的。          我们已经明确的知道,有一个队列,它的名字叫indexingqueue,它中存放的是待提取的document,下面我们就来看看它的生产者是谁:   1.       生产者 我们在前面的文章中提到过,VolatileIndex(内存数据)的pending队列中document数量超过10(默认值)的时候,会触发一个操作,一个多线程并发生成索引的数据,而且这个数据是存在于RamDirectory中,显然,当一个binary需要做文本提取的时候,应该也是 ...
用lucene作过索引的同学一定对文本提取不会陌生,但凡有binary需要作索引的地方,那就离不开文本的提取,而jackrabbit是可以存储二进制数据的,而这些二进制数据中包含的文本也是需要被搜索到的,所以jackrabbit里建索引的过程 ...
接上文,在上面一篇文章中,我们谈到了update中的Delete和Add 下面我们来谈谈第三个大问题,就是flush的逻辑 3 什么是flush 大家可能已经沉浸于AddNode逻辑而不能自拔了,清醒一点,我们再次回到MultiIndex#update看看,有这么一段代码: if (flush) {                 flush();             } 不知道是否有人想起flush怎么才能为true呢,当VolatileIndex处理的document超过100的时候,需要把内存中的index数据copy到persistentindex中,这个时候返回t ...
在上上篇文章中,我们了解了创建索引的一般流程,在上篇文章中,我们也已经明确的知道,一个node的哪些信息是需要加入到索引中去的,也就是jackrabbit是如何来创建document的。那么接下来我们就是要了解jackrabbit是如何把这些document加入到索引文件中去的。 接下来我们需要回顾一下索引概览中的最后几句话: 那么代码的主要逻辑在哪里呢? 在DeleteNode和AddNode类中,还有就是在flush方法中。 这句话充分了说明本文需要描述的内容,那便是 1 如何把document从index删除 2 如何把document放到index中 3 什么是flush ...
/** *作者:ahuaxuan 张荣华 *日期:2009-07-01 **/ 在上一篇文章中,ahuaxuan描述了jackrabbit中创建index的主体流程,同时也曾提到,在创建流程中有一个方法非常重要,它影响着整个query体系,这个方法便是createDocument。在本文中,ahuaxuan将和大家一起来探讨如何根据一个node来创建对应的document。 二话不说,直接切入正题,让我们首先来看看SearchIndex#createDocument方法,从这个方法里包含着创建document的逻辑,方法中加入了ahuaxuan的注释: protected Documen ...
任何一个数据库都离不开一个技术----索引技术,jackrabbit作为内容仓库的开源实现亦不能例外,从前面的文章中我们已经清楚的知道jackrabbit使用lucene来进行索引任务和查询任务。而查询正是基于索引,所以在本文中,ahuaxuan将和 ...
/** *author: ahuaxuan *date: 2009-06-20 */ 查询进阶 在第一篇文章的例子中,我们看到jackrabbit中存放数据的流程还是比较清晰的,而且我们也基本确定了其中数据的存储方式,一颗m叉树。 正如db一样,insert都是看上去相对简单的,select相对总是没有这么简单的,如同关系数据库一样,jackrabbit中查询也有类似的流程,一般来说分成三个部分:1解析查询语句,2查询,3返回结果。这个应该是一个比较通用的模型。Jackrabbit的search部分亦不过如此。下面我们来看一个search的小例子。 public static void ...
有关癌症--看完再寄给别人-功德无量 三十多年前有一位服务于公卖局台北啤酒厂的张先生,参加该啤酒厂选派技术人员到国外深造的考试,以优异的成绩及格。但在出国前经某公立医院体检发现,罹患有像孩拳头大小的肺部肿瘤,因而不能出国。 张先生失望之余,一直怀疑诊断有误;于是再到另一家医院检查,结果还是证实原来的诊断并无错误。当时年轻力壮的张先生得到这样的绝症,在人生绝望之余,多次打电话给当时任职台东县政府黄顺兴县长机要秘书的魏姓同学。 魏姓同学便利用星期日赶到台北和张先生见面,张先生向魏同学详述相关绝望的详情和悲观感受,并请魏同学协助其料理后事,恰逢魏同学与前任马偕医院的院长(1949-55 ,专精于癌 ...
Global site tag (gtag.js) - Google Analytics