随笔分类 - Lucene
ssyq
摘要:--自己总结的Lucene熟悉而暧昧的几个问题。
阅读全文
摘要:--自己学习build index时笔记
阅读全文
摘要:使用Lucene自带的Highlighter就可以实现对原始文件摘要的提取工作。Highlighter类有一个getBestFragment方法,这个方法有多个重载的方法,其中,使用:public final String getBestFragment(Analyzer analyzer, String fieldName,String text)就可以提取摘要,它实现了从指定的原始文件中,提取...
阅读全文
摘要:如果在初始化一个IndexWriter索引器的时候,指定 useCompoundFile =false,则在指定的索引目录中生成的索引文件就不是.cfs复合索引文件。通过这种方式生成的索引文件,它的不同格式表明了它锁存储的关于索引的不同内容。至少,明确了在建立索引过程中,经过加工处理的数据究竟去向如何,能够加深对Lucene索引过程的理解。通过在文章 Lucene-2.2.0 源代码阅读学习(4)...
阅读全文
摘要:复合索引文件格式(.cfs)是如何产生的?从这个问题出发,研究索引文件是如何合并的,这都是IndexWriter类中定义的一些重要的方法。在建立索引过程中,生成的索引文件的格式有很多种。在文章 Lucene-2.2.0 源代码阅读学习(4) 中测试的那个例子,没有对IndexWriter进行任何的客户化设置,完全使用Lucene 2.2.0默认的设置(以及,对Field的设置使用了Lucene自带...
阅读全文
摘要:阅读了这么多代码,该综合总结一下了。通过在文章 Lucene-2.2.0 源代码阅读学习(4) 中的那个例子,跟踪一下一个IndexWriter索引器实例化过程,及其建立索引的过程中都经过了哪些处理(主要看涉及到了哪些类来完成建立索引的强大功能)。在文章 Lucene-2.2.0 源代码阅读学习(4) 中的主函数如下所示:public static void main(String[] args)...
阅读全文
摘要:通过对DocumentWriter类的writePostings()方法进行学习。同时,研究并解决几个我一直感到困惑的几个类的用途,以及到底怎样阐述能使自己有一种感性的认识。writePostings()方法的实现writePostings()方法是对已经经过倒排的文档,将词条的一些有用信息写入到索引段文件中。该方法的实现如下所示:private final void writePostings(...
阅读全文
摘要:关于FieldInfos类和FieldInfo类。FieldInfo类与一个Document中的一个Field相对应,而FieldInfos类又是多个FieldInfo的容器,对每个Document的所有Field对应的FieldInfo进行管理。FieldInfos类和FieldInfo类之间的关系,恰似SegmentInfos类(可以参考文章 Lucene-2.2.0 源代码阅读学习(18))...
阅读全文
摘要:研究SegmentInfo类的实现。虽然在阅读代码的时候,是一件很枯燥的事情,尤其是当代码非常地长,这使得我们感觉这是一种压力,但是如果把代码当成是一种乐趣的时候,你会发现代码是那样的富有感情色彩。呵呵。SegmentInfo类在Lucene 2.0.0版本的时候,定义非常简单,就定义了一个构造函数,如下所示:package org.apache.lucene.index;import org.a...
阅读全文
摘要:然而,到底SegmentInfos类能够实现哪些功能,让我们能够亲眼看到它产生了哪些东西呢?我们可以从SegmentInfos类的一些重要的成员方法中开始追踪一些真实存在的东西到底去向如何,比如segmentName,以及version和gen等等,他们都是有值的,那么,这些值应该被怎样地输出呢,又输出到哪里去了呢,下面仔细学习研究。先做个引子:在前面的文章中,我们做了一个小例子,对指定目录中的一...
阅读全文
摘要:对IndexFileDeleter类和CommitPoint类的源代码的阅读学习,在此进行总结:一个提交点所具有的信息如下所示: long gen; // 下次提交索引段segments_N的版本 List files; // 属于当前索引目录的索引段的一个列表 String segmentsFileName; // 一个索引段 boolean deleted; // 删除标志一个提交点具有的行为...
阅读全文
摘要:在接触到索引删除的策略IndexDeletionPolicy 的时候,提到一个提交点(IndexCommitPoint)的概念。在合适的时机,根据策略需求,需要对这些提交点(IndexCommitPoint)执行删除操作。这些个提交点(IndexCommitPoint)究竟具有怎样的特征呢?IndexCommitPoint是一个索引提交点的接口类,定义非常简单,如下所示:package org.a...
阅读全文
摘要:关于索引删除的策略IndexDeletionPolicy 。public IndexWriter(Directory d, Analyzer a, boolean create) throws CorruptIndexException, LockObtainFailedException, IOException { init(d, a, create, false, null, true);}...
阅读全文
摘要:RAMDirectory类是与内存目录相关的,它和FSDirectory有很大地不同,这主要从它的构造函数来看:public RAMDirectory() { setLockFactory(new SingleInstanceLockFactory()); }初始化的时候,指定的是LockFactory抽象类的一个具体实现类SingleInstanceLockFactory。SingleInst...
阅读全文
摘要:Directory抽象类比较常用的具体实现子类应该是FSDirectory类和RAMDirectory类。FSDirectory类是与文件系统的目录相关的,而RAMDirectory类是与内存相关的,即是指内存中的一个临时非永久的区域。FSDirectory类源代码定义如下:package org.apache.lucene.store;import java.io.File;import jav...
阅读全文
摘要:对数据源进行分析,是为建立索引服务的;为指定的文件建立索引,是为检索服务的。对数据源分析,使用Lucene的分析器(Analyzer),根据分析器所得到的词条,构造一个索引器IndexWriter。索引器IndexWriter的功能主要就是创建索引,是建立索引工作中最核心的。当构造完一个索引器IndexWriter之后,就可以向其中添加Document了。在前面Lucene-2.2.0 源代码阅读...
阅读全文
摘要:Lucene的CJKAnalyzer分析器。CJKAnalyzer分析器的思想:对中文汉字,每两个字作为一个词条,例如A,B,C,D是四个中文汉字,使用CJKAnalyzer分析器分词后一共得到三个词条如下:AB,BC,CD。其实,CJKAnalyzer分析器在对中文分词方面比StandardAnalyzer分析器要好一点。因为根据中文的习惯,包括搜索的时候键入关键字的习惯,中文的词(大于一个汉字...
阅读全文
摘要:Lucene的StandardAnalyzer分析器。不同的Lucene分析器Analyzer,它对TokenStream进行分词的方法是不同的,这需要根据具体的语言来选择。比如英文,一般是通过空格来分割词条,而中文汉字则不能通过这种方式,最简单的方式就是单个汉字作为一个词条。TokenStream是通过从设备或者其他地方获取数据源而构造的一个流,我们要执行分词的动作,应该对这个TokenStre...
阅读全文
摘要:Lucene分析器的实现。Lucene(分词)过滤器TokenFilter类,以及继承它的子类的实现类。TokenFilter类的继承关系,如图所示:TokenFilter是一个抽象类,定义了对一个经过分词(Tokenizer)后的TokenStream进行过滤的功能,它的源代码如下所示:package org.apache.lucene.analysis;import java.io.IOExc...
阅读全文