`
zm2011
  • 浏览: 39138 次
社区版块
存档分类
最新评论

lucene索引的更新和删除

阅读更多
索引的删除:
IndexReader和IndexWriter都由删除索引的功能,但这两者是有区别的,
使用IndexReader删除索引时,索引会马上被删除,其有两种方法,可以删除索引deleteDocument(int docNum)和deleteDocument(Term term)前者会删除编号为docNum的document,后者会删除带有term的document。但是用这个类删除有局限性,当用此类打开的索引后来修改后会报StaleReaderException异常,并且当其他writer已经打开此索引时也会报异常。
IndexWriter可以根据多种情况进行删除deleteAll()删除所有的document、deleteDocuments(Query… queries)删除多个查询出来的document,deleteDocuments(Query query)删除query查询出来的document等等,但用Indexwriter执行删除的话一定要进行关闭,否则删除不会立马生效。
Directory directory = FSDirectory.open(new File("d:\\lucene"));
		IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34));
		//最大缓存文档数,控制写入一个新的segment前内存中保存的document的数目
		config.setMaxBufferedDocs(100);
		//控制一个segment中可以保存的最大document数目,值较大有利于追加索引的速度,默认Integer.MAX_VALUE,无需修改。
		config.setMaxBufferedDocs(Integer.MAX_VALUE);
		IndexWriter indexWriter = new IndexWriter(directory, config);
		indexWriter.deleteDocuments(new Term("id",index));
         //这两句一定要执行
		indexWriter.optimize();
		indexWriter.close();


索引的更新:
IndexWriter可以更新索引。
更新索引实际上是把要更新的document删除,然后把修改过的document加入到索引中,其方法是document(Term term,Document doc),第一个参数是删除含有term的document,第二个参数是更新后的document。
Directory directory = FSDirectory.open(new File("d:\\lucene"));
		IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34));
		//最大缓存文档数,控制写入一个新的segment前内存中保存的document的数目
		config.setMaxBufferedDocs(100);
		//控制一个segment中可以保存的最大document数目,值较大有利于追加索引的速度,默认Integer.MAX_VALUE,无需修改。
		config.setMaxBufferedDocs(Integer.MAX_VALUE);
		IndexWriter indexWriter = new IndexWriter(directory, config);
		
		Document doc = new Document();
		
		//设置Field的name是为了搜索时更精确,比如只想在title中搜索。
		Field idField = new Field("id", blog2.getId() + "", Field.Store.YES, Field.Index.NOT_ANALYZED);
		Field titleField = new Field("title", blog2.getTitle(), Field.Store.YES, Field.Index.ANALYZED);
		Field contentField = new Field("content", blog2.getContent(), Field.Store.NO, Field.Index.ANALYZED);
		Field dateField = new Field("date", blog2.getDate(), Field.Store.YES, Field.Index.NO);
		
		doc.add(titleField);
		doc.add(contentField);
		doc.add(idField);
		doc.add(dateField);
		
		indexWriter.updateDocument(new Term("id", blog2.getId() + ""), doc);
		//这两句一定要执行,不然的话,更新不会马上执行。
indexWriter.optimize();
		indexWriter.close();

分享到:
评论

相关推荐

    Lucene之删除索引

    Lucene的索引删除过程并不像传统的文件系统删除那么简单,它涉及到对倒排索引结构的修改。 1. **删除文档**:在Lucene中,删除操作并不是真正地从磁盘上移除文档,而是通过添加一个删除标记到索引中。当你调用`...

    Lucene索引和查询

    - 更新和删除:如果数据发生改变,Lucene提供机制更新索引或删除文档。 - 多线程支持:在大型应用中,可能需要并发创建和查询索引,Lucene支持多线程操作。 - 性能优化:如使用内存映射文件(MMapDirectory)、优化...

    Lucene索引器实例

    以下是一个简单的Java代码示例,展示了如何创建和使用Lucene索引器: ```java import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache....

    Lucene 索引的简单使用

    - **更新和删除**:使用IndexWriter可以更新已有文档,或通过ID删除文档。 - **多线程索引**:通过控制IndexWriter的并发设置,可以提高索引大量数据时的性能。 以上就是关于“Lucene索引的简单使用”的详细介绍,...

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    **四、索引删除** 删除整个索引时,可以直接关闭`IndexWriter`并清空目录。但如果你只想删除单个文档,可以按照上述“索引修改”部分的方法进行操作。如果需要完全删除索引,可以使用以下代码: ```csharp ...

    Lucene索引的基本操作

    本文将深入探讨Lucene索引的基本操作,包括如何添加文档到索引、更新已有的索引以及相关的测试代码。 ### 1. 初始化Lucene环境 首先,我们需要导入Lucene的相关库。在Java项目中,可以通过Maven或Gradle等构建工具...

    Lucene 索引、删除、检索 实例

    本实例将详细介绍如何使用Lucene进行索引创建、索引删除以及文档检索。 ### 1. Lucene 索引 Lucene 的索引过程主要包括以下几个步骤: - **创建Analyzer**: Analyzer是处理文本的关键组件,负责将输入的文本分解...

    Lucene读取索引文件

    一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...

    基于lucene技术的增量索引

    本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...

    Lucene Demo(创建、增加、更新、删除索引等)

    这样做的原因是 Lucene 的索引是不可变的,只能通过删除和添加操作来实现更新。 **更新索引** 更新索引通常涉及查找已存在的文档,修改其内容,然后重新添加。可以使用 `TermQuery` 或 `Term` 对象定位特定文档,...

    Lucene 删除 合并索引

    Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教

    lucene 4.7.2 Demo

    本文将深入探讨Lucene 4.7.2的特性,包括创建、删除和修改索引,以及高级搜索功能如通用对象搜索、范围搜索、排序和高亮显示。 首先,让我们了解如何利用Lucene 4.7.2创建索引。创建索引是全文检索的基础,它涉及将...

    一个非常好的检测lucene索引库的工具

    Lucene支持多种操作,如创建、更新和删除索引,以及复杂的查询语法,这个工具可能是为了辅助这些操作,提供一种便捷的方式来诊断可能出现的问题。 至于“压缩包子文件的文件名称列表”中提到的“lucene tool”,这...

    Lucene索引数据分析器

    例如,`Analyzer`类用于文本分析,`IndexWriter`用于建立和更新索引,而`IndexReader`则用于检索索引信息。通过这些API,开发者可以定制化处理文本,比如使用自定义的分词规则,或者实现特定的排序和评分算法。 **...

    Lucene 索引图形化界面工具 LukeAll 3.5~4.0

    为了解决这个问题,开发出了 LukeAll,这是一个专门针对 Lucene 索引的高级图形化界面工具,使得用户可以直观地查看和操作 Lucene 的索引。 LukeAll 支持从 3.5.0 到 4.0.0-ALPHA 的版本,这表明它能够适应 Lucene ...

    Lucene索引文件格式

    《Lucene索引文件格式详解》 Lucene,作为一款强大的全文搜索引擎库,其索引文件格式是实现高效搜索的关键。本文将深入解析Lucene 1.3版本的索引文件结构,帮助读者理解其内部运作机制。 首先,我们要理解Lucene...

    LUCENE索引搜索数据库技术汇总

    **LUCENE索引搜索数据库技术汇总** Lucene是一个高性能、全文检索库,它是Apache软件基金会的顶级项目,被广泛应用于各种搜索引擎的开发。在学习和应用Lucene的过程中,掌握其核心概念和技术至关重要。以下是对...

    lucene索引简单介绍

    `索引.ppt`这样的文件可能是对Lucene索引原理的详细讲解,可能包含了PPT演示,涵盖了上述概念并可能提供了实例代码和案例分析。 总之,Lucene是一个强大的全文检索工具,它的索引机制是实现高效搜索的关键。通过...

    lucene索引的简单使用

    1. **更新与删除**:Lucene提供了updateDocument和deleteDocuments方法来更新已存在的文档或删除指定的文档。 2. **性能优化**:可以通过设置批处理大小、使用多线程、利用缓存等方式优化索引和查询性能。 3. **...

    Lucene索引管理器(基于Luke修改而来)

    通过这个工具,用户可以创建、更新和删除Lucene索引。创建索引时,可以指定哪些数据字段被索引,以及如何分词。更新索引涉及添加新文档、删除旧文档或合并段。删除操作通常涉及标记文档为删除,而不是物理移除,以...

Global site tag (gtag.js) - Google Analytics