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

lucene的锁机制--IndexWriter

 
阅读更多

1:lucene中打开一个IndexWriter后就会把索引改lock住,如果强行在打开一个IndexWriter那么就会抛出:

Lock obtain timed out: NativeFSLock@D:\lucene\index\write.lock异常。

2:所以在Lucene中要记得及时关闭IndexWriter。

 

package com.searchtxt.lucene;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Before;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

import com.sun.org.apache.xml.internal.security.Init;

/**
 * 测试lucene索引锁不能同时打开多个IndexWriter
 * @author lijunqing
 *
 */
public class WriteLcok {
    private Directory directory;
    private Analyzer analyzer;
    
    @Before
    public void  Init() throws IOException{
        directory = FSDirectory.open(new File("D://lucene/index"));
        analyzer = new IKAnalyzer();
    }
    
    @Test
    public void TestWriteLock() throws IOException{
        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_40, analyzer );
        IndexWriter writer1 = new  IndexWriter(directory, iwc);
        //writer1.close();
        IndexWriter writer2 = null;
        try{
            if(writer1.isLocked(directory)){
                System.out.println("writer1已经被锁");
            }
            writer2 = new IndexWriter(directory, iwc);
            System.out.println("第二个IndexWriter打开成功!");
        }catch(IOException e){
            e.printStackTrace();
            System.out.println("第二个IndexWriter打开失败!");
        }finally{
            writer1.close();
        }
    }
}

 1:结果会抛出异常,

同时lucene的IndexWrite中有:

  public static boolean isLocked(Directory directory) throws IOException {
    return directory.makeLock(WRITE_LOCK_NAME).isLocked();
  }

 检查索引是否已经被锁。

而unlock方法,释放当前锁:

 public static void unlock(Directory directory) throws IOException {
    directory.makeLock(IndexWriter.WRITE_LOCK_NAME).release();
  }
 不能乱用这个。

 

分享到:
评论

相关推荐

    lucene-core-3.0.2.jar,lucene-demos-3.0.2.jar

    在3.0.2版本中,Lucene引入了诸多优化,比如更高效的内存管理、更快的搜索速度以及更灵活的索引构建机制。其中,Document类是表示单个文档的基础单元,Field类则用于定义文档中的字段,如标题、内容等。Analyzer是...

    lucene-core-2.4.0.jar

    总结,Lucene是一个强大且灵活的全文搜索引擎库,无论是在2.4.0版本还是后续版本,其核心机制和功能都为开发者提供了构建高效搜索系统的可能。通过深入理解Lucene,开发者可以更好地满足用户对信息检索的需求,提升...

    lucene-4.2.1-src.tgz

    同时,Lucene支持评分机制,通过`Similarity`接口来计算文档的相关度。 5. **文档存储**:`Directory`接口表示索引的存储位置,如文件系统或内存。`Document`对象用于存储文档内容,`Field`对象则定义了文档字段的...

    lucene-core-3.0.0.rar_lucene_lucene-core3

    1. **索引**:Lucene的索引机制是一种倒排索引(Inverted Index),它将文档中的词汇映射到包含这些词汇的文档列表。这种数据结构使得搜索效率极高,能够在短时间内返回相关结果。 2. **分词器(Tokenizer)**:...

    lucene源码---官网最新下载

    通过阅读和理解 `lucene-2.9.4` 版本的源码,开发者可以学习到 Lucene 的核心机制,这对于开发自定义搜索引擎或者对全文检索技术有深入了解是非常有价值的。同时,了解老版本的代码也有助于对比新版本的改进和优化,...

    lucene-2.9.4-src.zip

    4. 分析器(Analyzer):Lucene提供了一种机制来处理输入文本,包括分词、去除停用词、词形还原等,以便于建立索引和进行搜索。 5. 查询解析器(QueryParser):将用户输入的查询字符串转换为内部表示,支持布尔...

    lucene-5.2.1-src.tgz

    通过深入研究`lucene-5.2.1-src.tgz`中的源代码,开发者可以了解Lucene的工作机制,定制自己的搜索解决方案,或为项目贡献代码,进一步提升Lucene的功能和性能。总之,Apache Lucene 5.2.1是一个强大且灵活的搜索...

    lucene-3.3.0-src.zip

    通过对`lucene-3.3.0-src.zip`源码的深入学习,开发者不仅可以掌握Lucene的基本使用,还能了解其内部机制,为自定义搜索引擎或相关应用提供强大的技术支持。同时,源码阅读也是理解开源软件设计理念和最佳实践的良好...

    lucene-3.6.1-src

    在这个"lucene-3.6.1-src"压缩包中,包含了Lucene 3.6.1版本的源代码,这个版本在当时是一个广泛应用且稳定的版本,对于理解Lucene的工作原理和实现机制有着极高的学习价值。 Lucene的核心组件主要分为以下几个部分...

    lucene-3.0.2-dev-src

    本文将重点探讨Lucene 3.0.2-dev版本的源码,帮助读者深入理解其内部机制和核心概念。 1. **索引原理** Lucene的核心功能之一是建立倒排索引,这是一种高效的文本检索方式。在`lucene-3.0.2-dev`源码中,`...

    lucene-2.9.0-src.tar.gz

    在2.9.0版本中,Lucene通过SegmentReader和TermDocs类实现了这一机制。 2.2 分词与标准化 分词器(Analyzer)是Lucene的重要组成部分,负责将输入文本分割成独立的词元。2.9.0版本中包含了标准分词器...

    lucene-3.0.0-src.zip

    在这个版本3.0.0的源码中,我们可以深入理解Lucene的核心机制和设计原理,这对于开发、优化以及定制自己的搜索引擎系统具有极大的价值。 一、Lucene基本架构 1. 文档索引:Lucene的核心工作是将非结构化的文本数据...

    Lucene---全文检索(文档pdf/txt/office/html)

    了解了 Lucene 的基础知识后,可以通过阅读源码来深入理解其内部机制。此外,可以使用诸如 Luke(Lucene Index Toolbox)这样的工具,可视化地查看和分析 Lucene 索引,帮助开发者更好地调试和优化索引。 总之,...

    lucene-core-2.4.0的源码

    1. **缓存**:为了提高查询速度,Lucene使用了多种缓存机制,如DocValuesCache、TermFreqVectorCache等。 2. **分段合并**:定期进行段合并可以减少索引碎片,提高查询效率。 六、拓展性 Lucene 2.4.0的源码提供...

    lucene-2.3.0-src

    4. **缓存机制**:引入了字段值缓存,提高重复查询的响应速度。 四、API详解 1. **Analyzer**:定义了如何对文本进行分词。例如,`StandardAnalyzer`适用于英文,而`ChineseAnalyzer`适用于中文。 2. **Query**:...

    lucene-3.0.3-src.zip

    本文将对Lucene 3.0.3的源码进行深度解析,探讨其核心机制和主要组件,帮助读者理解如何利用这个工具包构建高效的全文搜索引擎。 一、Lucene的架构概述 Lucene的核心架构由以下几个关键组件构成: 1. **索引...

    lucene-2.2.0-src

    本文将深入探讨Lucene 2.2.0版本的源代码,解析其设计理念、核心功能和实现机制,帮助开发者更好地理解和利用这一强大的搜索技术。 一、Lucene概述 Lucene的核心功能是索引和搜索,其设计目标是让开发者可以快速地...

    lucene-in-action-clone:lucene-in-action 一书中源代码的克隆

    Lucene利用了Java的面向对象特性来构建复杂的索引和搜索机制。 Lucene的核心功能包括文档索引、查询解析、查询执行和结果排序。在源代码中,你可以看到如何使用Lucene API创建索引,这涉及到Analyzer(分析器)用于...

    lucene-5.5.3.zip

    - **近实时搜索**:通过NRT(Near Real Time)机制,即使在索引更新后也能迅速反映出新的数据。 - **DocValues**:用于存储字段的不可变值,如日期、分类标签等,提供高效的排序和过滤功能。 - **块级压缩**:...

    官方最新完整版lucene-6.6.0.zip

    1. **创建索引**:通过`IndexWriter`类创建和管理索引,添加或删除文档。 2. **搜索索引**:使用`IndexSearcher`进行搜索,`QueryParser`帮助解析查询字符串。 3. **读取索引**:`DirectoryReader`用于读取索引,...

Global site tag (gtag.js) - Google Analytics