`
wjboy49
  • 浏览: 275490 次
  • 性别: Icon_minigender_1
  • 来自: 湖南岳阳
社区版块
存档分类
最新评论
文章列表
研究SegmentInfo类的实现。 虽然在阅读代码的时候,是一件很枯燥的事情,尤其是当代码非常地长,这使得我们感觉这是一种压力,但是如果把代码当成是一种乐趣的时候,你会发现代码是那样的富有感情色彩。呵呵。 SegmentInfo类在Lucene 2.0.0版本的时候,定义非常简单,就定义了一个构造函数,如下所示: package org.apache.lucene.index; import org.apache.lucene.store.Directory; final class SegmentInfo { public String name;      // unique ...
关于SegmentInfos类的具体实现大致已经在文章 Lucene-2.3.1 源代码阅读学习(17) 中有了一个简单的印象,可以在文章 Lucene-2.3.1 源代码阅读学习(17) 中的末尾部分看到一点非常有用的总结。 然而,到底SegmentInfos类能够实现哪些功能,让我们能够亲眼看到它产生了哪些东西呢?我们可以从SegmentInfos类的一些重要的成员方法中开始追踪一些真实存在的东西到底去向如何,比如segmentName,以及version和gen等等,他们都是有值的,那么,这些值应该被怎样地输出呢,又输出到哪里去了呢,下面仔细学习研究。 先做个引子: 在前面的文章 L ...
根据16中对IndexFileDeleter类和CommitPoint类的源代码的阅读学习,在此进行总结: 一个提交点所具有的信息如下所示:      long gen;    // 下次提交索引段segments_N的版本    List files;    // 属于当前索引目录的索引段的一个列表    String segmentsFileName;    // 一个索引段    boolean deleted;    // 删除标志 一个提交点具有的行为: 1、通过getSegmentsFileName()方法,得到一个索引段文件的名称; 2、通过delete()方法,获取到具 ...
在接触到索引删除的策略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.apa ...
接着昨天学习的Lucene-2.3.1 源代码阅读学习(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的功能主要就是创建索引 ...
Lucene的CJKAnalyzer分析器。 CJKAnalyzer分析器的思想: 对中文汉字,每两个字作为一个词条,例如A,B,C,D是四个中文汉字,使用CJKAnalyzer分析器分词后一共得到三个词条如下: AB,BC,CD。 其实,CJKAnalyzer分析器在对中文分词方面比StandardAnalyzer分析器要好一点。因为根据中文的习惯,包括搜索的时候键入关键字的习惯,中文的词(大于一个汉字)比单个汉字的频率应该高一些。 但是,在设置相同的过滤词条文本以后,CJKAnalyzer分析器的缺点就是产生了冗余会比较大,相对于StandardAnalyzer分析器来说。使用St ...
Lucene的StandardAnalyzer分析器。 不同的Lucene分析器Analyzer,它对TokenStream进行分词的方法是不同的,这需要根据具体的语言来选择。比如英文,一般是通过空格来分割词条,而中文汉字则不能通过这种方式,最简单的方式就是单个汉字作为一个词条。 TokenStream是通过从设备或者其他地方获取数据源而构造的一个流,我们要执行分词的动作,应该对这个TokenStream进行操作。 TokenStream也可以不是直接通过数据源构造的流,可以是经过分词操作之后读入TokenFilter的一个分词流。 从本地磁盘的文件读取文本内容,假定在文本文件shird ...
Lucene分析器的实现。 Lucene(分词)过滤器TokenFilter类,以及继承它的子类的实现类。 TokenFilter类的继承关系,如图所示: TokenFilter是一个抽象类,定义了对一个经过分词(Tokenizer)后的TokenStream进行过滤的功能,它的源代码如下所示: package org.apache.lucene.analysis; import java.io.IOException; public abstract class TokenFilter extends TokenStream {// 通过输入一个TokenStreampro ...
CharTokenizer是一个抽象类,它主要是对西文字符进行分词处理的。常见的英文中,是以空格、标点为分隔符号的,在分词的时候,就是以这些分隔符作为分词的间隔符的。 package org.apache.lucene.analysis; import java.io.IOException;import java.io.Reader; // CharTokenizer 是一个抽象类public abstract class CharTokenizer extends Tokenizer {public CharTokenizer(Reader input) {    super(inpu ...
Lucene分析器的实现。 Lucene分词器Tokenizer,它的继承子类的实现。 Tokenizer类的继承关系,如图所示: ChineseTokenizer类实现中文分词 中文分词在Lucene中的处理很简单,就是单个字分。它的实现类为ChineseTokenizer,在包org.apache.lucene.analysis.cn中,源代码如下: package org.apache.lucene.analysis.cn; import java.io.Reader;import org.apache.lucene.analysis.*; public final cl ...
研究Lucene分析器的实现。 Analyzer抽象类 所有的分析器的实现,都是继承自抽象类Analyzer,它的源代码如下所示: package org.apache.lucene.analysis; import java.io.Reader; public abstract class Analyzer {//   通过Field的名称,和一个Reader对象,创建一个分词流,该方法是抽象方法public abstract TokenStream tokenStream(String fieldName, Reader reader); //个人理解,感觉这个方法是在后台分词用 ...
Global site tag (gtag.js) - Google Analytics