`
sharp-fcc
  • 浏览: 110810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene 4.6 之indexing 之 IndexWriter, DocumentWriter

阅读更多

lucene 的操作主要分成 indexing 和 searching , 两个操作也就完成了整个闭环操作,咱们先从这个indexing说起。

class IndexWriter 可以说是lucene暴露给上层应用的一个类。上层应用程序通过这个类打开lucene的索引世界。

通过了解这个类得成员变量来了解这个类到底是干什么的,有几个比较重要的对象:

private final Directory directory;  // where this index resides
  private final Analyzer analyzer;    // how to analyze text
  private final DocumentsWriter docWriter;
private final MergeScheduler mergeScheduler;
  private LinkedList<MergePolicy.OneMerge> pendingMerges = new LinkedList<MergePolicy.OneMerge>();
  private Set<MergePolicy.OneMerge> runningMerges = new HashSet<MergePolicy.OneMerge>();
  private List<MergePolicy.OneMerge> mergeExceptions = new ArrayList<MergePolicy.OneMerge>();
  privatelongmergeGen;
privatebooleanstopMerges;

 

  

 目录,segment信息,段之间merge的策略,analyzer,还有负责真正写的 DocumentWriter。

 

在构造函数中,基本做了以下几件事情:

1.  加锁

2.  加载配置

3.  初始化Flush策略(从RAM flush 到磁盘上)

4.  初始化DocumentWriter

5.  初始化IndexDeleter(用来最后删除没用的索引文件的,记录每一个文件的引用计数)

 

DocumentWriter

IndexWriter通过调用DocumentWriter的方法,来操作索引。

每一个文档传给DocuentWriter中得DocConsumer , DocConsumer是整个搜索的核心,是indexing chain的源头。

DocumentWriter 中有一个synchronized的方法getThreadState为每一个线程分配一个ThreadState,然后就可以调用ThreadState中得方法,大多数heavy lifting 的任务在这个调用中,最后同步的synchronized finishDocument方法去flush change.

  private final Directory directory;

  private volatile boolean closed;

  private final InfoStream infoStream;

  private final LiveIndexWriterConfig config;

  private final AtomicInteger numDocsInRAM = new AtomicInteger(0);

  // TODO: cut over to BytesRefHash in BufferedDeletes
  volatile DocumentsWriterDeleteQueue deleteQueue = new DocumentsWriterDeleteQueue();
  private final DocumentsWriterFlushQueue ticketQueue = new DocumentsWriterFlushQueue();
  /*
   * we preserve changes during a full flush since IW might not checkout before
   * we release all changes. NRT Readers otherwise suddenly return true from
   * isCurrent while there are actually changes currently committed. See also
   * #anyChanges() & #flushAllThreads
   */
  private volatile boolean pendingChangesInCurrentFullFlush;

  final DocumentsWriterPerThreadPool perThreadPool;
  final FlushPolicy flushPolicy;
  final DocumentsWriterFlushControl flushControl;
  private final IndexWriter writer;
  private final Queue<Event> events;

在构造函数zh中可以看到,他主要就是做一些策略的管理,管理DocumentsWriterPerThreadPool.

 

 

DocumentsWriterPerThread 对象创建了DocConsumer 即IndexChain(整个索引的核心),下一章会详细讲这件事情,同时

 

 

ThreadState  封装了DocumentsWriterPerThread对象,同时拥有每一个线程需要flush的对象数据,他得每一个成员和方法必须在一个时刻只能一个线程访问,调用者必须自己加锁,解锁。

 

 

DocumentsWriterPerThreadPool  控制indexing的时候 ThreadState的分配,每一个ThreadState存在对DocumentsWriterPerThread的一个引用,每一个线程必须获取这么一个ThreadState来进行indexing,

 

 

DocumentsWriterFlushControl 类来控制flush策略,记录每一个DocumentsWriterPerThread内存消耗的量。

 

分享到:
评论

相关推荐

    lucene4.6jar

    《全面解析Lucene 4.6:核心概念与应用实践》 Lucene 4.6是Apache Lucene项目的一个重要版本,它是一个高性能、全文本搜索引擎库,为开发者提供了强大的文本检索功能。在这个版本中,Lucene进行了诸多优化和改进,...

    lucene4.6例子

    《深入理解Lucene 4.6:索引构建、查询执行与近实时搜索》 Lucene是一个开源全文搜索引擎库,广泛应用于各种信息检索系统。在本文中,我们将深入探讨Lucene 4.6版本,包括如何创建索引、执行查询以及实现近实时搜索...

    lucene4.6所有jar包

    《深入理解Lucene 4.6:搜索引擎框架详解》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了完整的搜索功能,包括索引、搜索、高亮显示结果等,广泛应用于各种信息检索系统。本文将重点探讨...

    Lucene4.6实战应用

    《Lucene4.6实战应用》一书主要探讨了Apache Lucene 4.6版本在实际项目中的应用和深入理解。Lucene是一个高性能、全文检索库,它为开发者提供了强大的文本搜索功能。作为开源项目,Lucene被广泛应用于各种信息检索...

    Lucene4.6+Solr4.6实战开发垂直搜索引擎视频课程

    18.lucene4.6索引的相关操作 19.lucene4.6的各种Query(1) 20.lucene4.6的各种Query(2) 21.lucene4.6的各种Query(3) 22.solr4.6的快速搭建 23.solr4.6索引的相关操作 24.solr4.6搜索的相关参数功能(1) 25.solr4.6搜索...

    lucene4.6实例

    《深入理解Lucene 4.6:实例解析与实践指南》 Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。它为开发者提供了在Java应用中实现全文索引和搜索的能力,广泛应用于各类信息检索系统。本文将重点...

    基于Lucene4.6+Solr4.6+S2SH实战开发垂直搜索引擎

    对于抓取的数据,进行去重,去标签,然后利用lucene 和 solr 进行索引和搜索。 课程的最大特点是内容新颖全面而又通俗易懂。对于实际搜索引擎所涉及的各种核心技术都有全面细致的介绍,除了作为搜索系统核心的网络...

    lucene 4.6 API docs (CHM格式)

    Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。 从之前发布其他chm文件下载用户的反映看,有不少朋友反映下载后...

    luence4.6例子

    《Apache Lucene 4.6源代码解析》 Apache Lucene 是一个开源的全文检索库,由Java编写,为开发者提供了强大的文本搜索功能。在深入理解Lucene 4.6的源代码之前,我们首先需要了解全文搜索引擎的基本原理。全文搜索...

    lucene.net实例

    **Lucene.NET 实例详解** Lucene.NET 是一个开源全文搜索引擎库,它是 Apache Lucene 的 .NET 版本。...在这个实例中,五万多条数据的索引和查询在短时间内完成,充分体现了 Lucene.NET 的强大之处。

    lucene-facet-4.6.0.jar

    Lucene4.6版本,适用于Lucene的所有研究,以及中文分词功能

    Lucene demo

    在描述中提到,这个 demo 使用的是 Lucene 4.6 版本。Lucene 的每个新版本通常会引入新的特性和改进,同时可能也会有向后不兼容的更改。例如,从 4.6 升级到 5.0 可能需要调整代码,以适应新的 API 或者功能。在使用...

    luncene 4.6 自定义查询评分规则

    在本篇文章中,我们将深入探讨如何在Lucene 4.6中实现自定义查询评分规则。此技术允许用户根据特定需求调整文档的相关性评分,从而更精确地满足搜索需求。 ### Lucene 4.6 自定义查询评分规则 #### 一、背景与概述...

    全文检索原理及Lucene实之搜索

    创建`IndexWriter`对象,该对象用于写入索引文件,索引文件的存储位置和分词器都是其构造函数的参数之一。 2. 创建`Document`对象,用于表示要索引的文档。 3. 将不同类型的字段(如标题、作者、内容等)添加到...

    与lucene3.0兼容的庖丁jar包

    lucene升级了,分词也得... at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1932) at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1906) 用该升级jar,可以解决该问题

    lucene,lucene教程,lucene讲解

    org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store.Directory public abstract class Analyzer org.apache.lucene.analysis.Analyzer public final class ...

    Lucene之删除索引

    当你调用`IndexWriter.deleteDocuments(Term term)`或`IndexWriter.deleteDocuments(Query query)`方法时,Lucene并不会立即从硬盘上删除对应的文档,而是将这些待删除的文档ID存储在一个叫做“位向量”(BitSet)的...

    lucene开发部分例子

    在Lucene中,你可以使用IndexWriter类来添加、删除文档,以及优化索引。索引的维护对于保持搜索引擎的性能至关重要。同时,了解如何备份和恢复索引也是这部分内容的一部分,以防止数据丢失。 最后,"桌面搜索引擎...

Global site tag (gtag.js) - Google Analytics