lucene4.7源码研究之索引建立过程(2)

不得不说一句,lucene的源码中大多数地方都留有注释,解释的很详细,阅读起来会很方便

定义分析器

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);

以StandardAnalyzer为例,就只加载了stopword和lucene的版本号

IndexWriterConfig初始化,加载了建立索引需要的配置

IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);

IndexWriterConfig继承LiveIndexWriterConfig

// used by IndexWriterConfig
  LiveIndexWriterConfig(Analyzer analyzer, Version matchVersion) {
    this.analyzer = analyzer;//加载分词器
    this.matchVersion = matchVersion;//lucene版本
    ramBufferSizeMB = IndexWriterConfig.DEFAULT_RAM_BUFFER_SIZE_MB;//当内存中达到该值,开始flush数据到硬盘,默认16M
    maxBufferedDocs = IndexWriterConfig.DEFAULT_MAX_BUFFERED_DOCS;//该值与maxBufferedDeleteTerms都为disable_auto_flush,默认值都是-1,自动flush被停止,也就是内存中不允许存储这两个值
    maxBufferedDeleteTerms = IndexWriterConfig.DEFAULT_MAX_BUFFERED_DELETE_TERMS;//同上
    readerTermsIndexDivisor = IndexWriterConfig.DEFAULT_READER_TERMS_INDEX_DIVISOR;//默认为1,读取term文件的除数
    mergedSegmentWarmer = null;//lucene给的解释warm is called before any deletes have been carried over the merged segment | warm是在任何删除操作之前调用,一直延迟到merge完毕
    termIndexInterval = IndexWriterConfig.DEFAULT_TERM_INDEX_INTERVAL; // TODO: this should be private to the codec, not settable here //默认跳跃表间距
    delPolicy = new KeepOnlyLastCommitDeletionPolicy();//针对索引提交删除的策略,实现IndexDeletionPolicy,注解上说明该策略只会保存最近的一次commit,如果一个commit操作完毕,就直接删除
    commit = null;
    useCompoundFile = IndexWriterConfig.DEFAULT_USE_COMPOUND_FILE_SYSTEM;//是否使用复合索引,默认为true
    openMode = OpenMode.CREATE_OR_APPEND;//打开模式为创建和追加
    similarity = IndexSearcher.getDefaultSimilarity();//设置默认打分策略,vsm
    mergeScheduler = new ConcurrentMergeScheduler();//段合并调度器,concurrent线程安全
    writeLockTimeout = IndexWriterConfig.WRITE_LOCK_TIMEOUT;//写锁超时
    indexingChain = DocumentsWriterPerThread.defaultIndexingChain;//索引链
    codec = Codec.getDefault();//lucene索引文件header(magic,codecname,version)校验,根据lucene版本区分,default为当前版本
    if (codec == null) {
      throw new NullPointerException();
    }
    infoStream = InfoStream.getDefault();//默认 NoOutput
    mergePolicy = new TieredMergePolicy();//段合并策略
    flushPolicy = new FlushByRamOrCountsPolicy();//flush策略
    readerPooling = IndexWriterConfig.DEFAULT_READER_POOLING;//默认不使用reader pool
    indexerThreadPool = new ThreadAffinityDocumentsWriterThreadPool(IndexWriterConfig.DEFAULT_MAX_THREAD_STATES);//允许在同一个indexWriter进行index操作的最大线程数量,默认是8
    perThreadHardLimitMB = IndexWriterConfig.DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB;//默认1945,每个线程在内存中分配最大的容量
  }

其中的各项策略等到真正调用的时候再做分析

时间: 2024-10-09 00:20:03

lucene4.7源码研究之索引建立过程(2)的相关文章

lucene4.7源码研究之索引建立过程(3)-2

接上篇 87 synchronized(this) {//构建索引管理对象 88 deleter = new IndexFileDeleter(directory, 89 config.getIndexDeletionPolicy(),//默认策略为KeepOnlyLastCommitDeleter 90 segmentInfos, infoStream, this, 91 initialIndexExists); 92 } 93 94 if (deleter.startingCommitDel

lucene4.7源码研究之索引建立过程(3)-1

真正构造IndexWriter IndexWriter indexWriter = new IndexWriter(directory, config); 构造过程 1 public IndexWriter(Directory d, IndexWriterConfig conf) throws IOException { 2 conf.setIndexWriter(this); // prevent reuse by other instances 防止被其他实例使用,这个引用被设置在Index

lucene4.7源码研究之索引建立过程(1)

Directory整体流程还是比较简单的,图片借用 Directory directory = FSDirectory.open(file); /** Creates an FSDirectory instance, trying to pick the * best implementation given the current environment. * The directory returned uses the {@link NativeFSLockFactory}. * * <p

Chrome自带恐龙小游戏的源码研究(七)

在上一篇<Chrome自带恐龙小游戏的源码研究(六)>中研究了恐龙的跳跃过程,这一篇研究恐龙与障碍物之间的碰撞检测. 碰撞盒子 游戏中采用的是矩形(非旋转矩形)碰撞.这类碰撞优点是计算比较简单,缺点是对不规则物体的检测不够精确.如果不做更为精细的处理,结果会像下图: 如图所示,两个盒子虽然有重叠部分,但实际情况是恐龙和仙人掌之间并未发生碰撞.为了解决这个问题,需要建立多个碰撞盒子: 不过这样还是有问题,观察图片,恐龙和仙人掌都有四个碰撞盒子,如果每次Game Loop里都对这些盒子进行碰撞检测

Chrome自带恐龙小游戏的源码研究(五)

在上一篇<Chrome自带恐龙小游戏的源码研究(四)>中实现了障碍物的绘制及移动,从这一篇开始主要研究恐龙的绘制及一系列键盘动作的实现. 会眨眼睛的恐龙 在游戏开始前的待机界面,如果仔细观察会发现恐龙会时不时地眨眼睛.这是通过交替绘制这两个图像实现的: 可以通过一张图片来了解这个过程: 为实现图片的切换,需要一个计时器timer,并且需要知道两张图片切换的时间间隔msPerFrame.当计时器timer的时间大于切换的时间间隔msPerFrame时,将图片切换到下一张,到达最后一张时又从第一张

Mina源码研究

目录 1. NioSocketAcceptor初始化源码研究 1.1 类图 1.2 方法调用时序图 1.3 初始化NioSocketAcceptor 1.4 SimpleIoProcessorPool初始化分析 1.5 NioProcessor的源码 1.6 总结 2. NioSocketAcceptor bind方法源码研究 2.1 创建ServerSocket监听 2.1.1 时序图 2.1.2 bind方法 2.1.3 startupAcceptor方法 2.1.4 创建ServerSoc

underscore.js源码研究(8)

概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以就了结研究underscore源码这一心愿吧. underscore.js源码研究(1) underscore.js源码研究(2) underscore.js源码研究(3) underscore.js源码研究(4) underscore.js源码研究(5) underscore.js源码研究(6)

Chrome自带恐龙小游戏的源码研究(完)

在上一篇<Chrome自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每达到100分就会出现闪烁特效,游戏第一次gameover时显示历史最高分.分数记录器由DistanceMeter构造函数实现,以下是它的全部代码: 1 DistanceMeter.dimensions = { 2 WIDTH: 10, //每个字符的宽度 3 HEIGHT: 13, //每个字符的高 4 DE

Redis源码研究—哈希表

Redis源码研究-哈希表 Category: NoSQL数据库 View: 10,980 Author: Dong 作者:Dong | 新浪微博:西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://dongxicheng.org/nosql/redis-code-hashtable/ 本博客的文章集合:http://dongxicheng.org/recommend/ 本博客微信公共账号:hadoop123(微信号为:hadoop-123),分享