`
文章列表
阅读了这么多代码,该综合总结一下了。 通过在文章 Lucene-2.2.0 源代码阅读学习(4) 中的那个例子,跟踪一下一个IndexWriter索引器实例化过程,及其建立索引的过程中都经过了哪些处理(主要看涉及到了哪些类来完成建立索引的强 ...
通过对DocumentWriter类的writePostings()方法进行学习。同时,研究并解决几个我一直感到困惑的几个类的用途,以及到底怎样阐述能使自己有一种感性的认识。       writePostings()方法的实现 writePostings()方法是对已经经过倒排的文档,将词条的一些有用信息写入到索引段文件中。该方法的实现如下所示: private final void writePostings(Posting[] postings, String segment)          throws CorruptIndexException, IOException ...
关于FieldInfos类和FieldInfo类。 FieldInfo类与一个Document中的一个Field相对应,而FieldInfos类又是多个FieldInfo的容器,对每个Document的所有Field对应的FieldInfo进行管理。 FieldInfos类和FieldInfo类之间的关系,恰似SegmentInfos类(可以参考文章 Lucene-2.2.0 源代码阅读学习(18))和SegmentInfo类(可以参考文章 Lucene-2.2.0 源代码阅读学习(19))之间的关系。 FieldInfo类的实现比较简单,该类的定义如下所示: package org ...
回到IndexWriter索引器类中来,学习该类添加Document的方法。 这时,需要用到一个非常重要的类:DocumentWriter,该类对Document进行了很多处理,比如“文档倒排”就是其中的一项重要内容。 实例化一个IndexWriter索引器之后,要向其 ...
关于Field类和Document类。 初始化一个IndexWriter索引器之后,就可以向其中添加Document了。然而,Document逻辑文件能够与一个物理文件对应起来,在Lucene中,Document主要是维护添加到其中的多个Field。 关于Field在文章 Lucene-2.2.0 源代码阅读学习(3) 中可以了解到一点相关内容,Field类的定义比较简单,它给出了7种构造一个Field对象的构造方法: public Field(String name, byte[] value, Store store)public Field(String name, Reader r ...
研究SegmentInfo类的实现。 虽然在阅读代码的时候,是一件很枯燥的事情,尤其是当代码非常地长,这使得我们感觉这是一种压力,但是如果把代码当成是一种乐趣的时候,你会发现代码是那样的富有感情色彩。呵呵。 SegmentInfo ...
关于SegmentInfos类的具体实现大致已经在文章 Lucene-2.2.0 源代码阅读学习(17) 中有了一个简单的印象,可以在文章 Lucene-2.2.0 源代码阅读学习(17) 中的末尾部分看到一点非常有用的总结。 然而,到底SegmentInfos类能够实现哪些功能,让我们能够亲眼看到它产生了哪些东西呢?我们可以从SegmentInfos类的一些重要的成员方法中开始追踪一些真实存在的东西到底去向如何,比如segmentName,以及version和gen等等,他们都是有值的,那么,这些值应该被怎样地输出呢,又输出到哪里去了呢,下面仔细学习研究。 先做个引子: 在前面的文章 L ...
根据 Lucene-2.2.0 源代码阅读学习(16) 中对IndexFileDeleter类和CommitPoint类的源代码的阅读学习,在此进行总结: 一个提交点所具有的信息如下所示:      long gen;    // 下次提交索引段segments_N的版本    List files;    // 属于当前索引目录的索引段的一个列表    String segmentsFileName;    // 一个索引段    boolean deleted;    // 删除标志 一个提交点具有的行为: 1、通过getSegmentsFileName()方法,得到一个索引段文件的 ...
在接触到索引删除的策略IndexDeletionPolicy 的时候,提到一个提交点(IndexCommitPoint)的概念。在合适的时机,根据策略需求,需要对这些提交点(IndexCommitPoint)执行删除操作。 这些个提交点(IndexCommitPoint)究竟具有怎样的特征呢? IndexCommitPoint是一个索引提交点的接口类,定义非常简单,如下所示: package org.apache.lucene.index; public interface IndexCommitPoint {    /**   * 获取与指定的索引提交点相关的索引段文件(这些索引 ...
关于索引删除的策略IndexDeletionPolicy 。 public IndexWriter(Directory d, Analyzer a, boolean create)       throws CorruptIndexException, LockObtainFailedException, IOException {    init(d, a, create, false, null, true);} 构造一个IndexWriter需要调用init()方法进行初始化,init()方法的声明如下所示: /*** 该方法中的参数列表中。各个参数的含义如下:* d :指定的存放建 ...
RAMDirectory类是与内存目录相关的,它和FSDirectory有很大地不同,这主要从它的构造函数来看: public RAMDirectory() {    setLockFactory(new SingleInstanceLockFactory());} 初始化的时候,指定的是LockFactory抽象类的一个具体实现类SingleInstanceLockFactory。SingleInstanceLockFactory类的特点是,所有的加锁操作必须通过该SingleInstanceLockFactory的一个实例而发生,也就是说,在进行加锁操作的时候,必须获取到这个Single ...
Directory抽象类比较常用的具体实现子类应该是FSDirectory类和RAMDirectory类。FSDirectory类是与文件系统的目录相关的,而RAMDirectory类是与内存相关的,即是指内存中的一个临时非永久的区域。 FSDirectory类源代码定义如下: package org.apache.lucene.store; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.i ...
接着昨天学习的Lucene-2.2.0 源代码阅读学习(11)继续学习。 IndexWriter的一个构造器,定义如下所示: public IndexWriter(String path, Analyzer a, boolean create)       throws CorruptIndexException, LockObtainFailedException, IOException {    init(FSDirectory.getDirectory(path), a, create, true, null, true);} 已经知道,init方法的复杂性和重要性。对init ...
对数据源进行分析,是为建立索引服务的;为指定的文件建立索引,是为检索服务的。 对数据源分析,使用Lucene的分析器(Analyzer),根据分析器所得到的词条,构造一个索引器IndexWriter。索引器IndexWriter的功能主要就是创建索引,是建立索引工作中最核心的。 当构造完一个索引器IndexWriter之后,就可以向其中添加Document了。 在前面Lucene-2.2.0 源代码阅读学习(1)中,根据Lucene提供的一个Demo,详细分析研究一下索引器org.apache.lucene.index.IndexWriter类,看看它是如果定义的,掌握它建立索引的机制 ...
Lucene的CJKAnalyzer分析器。 CJKAnalyzer分析器的思想: 对中文汉字,每两个字作为一个词条,例如A,B,C,D是四个中文汉字,使用CJKAnalyzer分析器分词后一共得到三个词条如下: AB,BC,CD。 其实,CJKAnalyzer分析器在对中文分词方面比StandardAnalyzer分析器要好一点。因为根据中文的习惯,包括搜索的时候键入关键字的习惯,中文的词(大于一个汉字)比单个汉字的频率应该高一些。 但是,在设置相同的过滤词条文本以后,CJKAnalyzer分析器的缺点就是产生了冗余会比较大,相对于StandardAnalyzer分析器来说。使用 ...
Global site tag (gtag.js) - Google Analytics