Lucene小练三——索引删除,恢复,更新

package org.se.lucene;

//主类
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;

public class lucene_index {
		private String[] ids={"1","2","3","4","5","6"};
		private String[] emails={"aa@aa.org","cc@cc.org","dd@@dd.org","bb@bb.org","ee@ee.org","ff@ff.org"};
		private String[] contents={"welcometotyu","hellowboy","higirl","howareyou","googluck","badgosh"};
		private int[] attachs={1,2,3,4,5,6};
		private String[] names={"liwu","zhangsan","xiaoqinag","laona","dabao","lisi"};
		private Directory directory=null;
		
		public lucene_index()
		{
			try {
				directory=FSDirectory.open(new File("f:/lucene/index02"));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		public void quary()
		{
			try {
				IndexReader reader=IndexReader.open(directory);
				System.out.println("numdocs"+reader.numDocs());
				System.out.println("maxDocs"+reader.maxDoc());
				System.out.println("detelemaxDocs"+reader.numDeletedDocs());
				reader.close();
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block 
				e.printStackTrace();
			}
			
		}
		
		@SuppressWarnings("deprecation")
		public void undelete()
		{
			try {
				//回复时必须把reader的只读设为false
				IndexReader reader=IndexReader.open(directory,false);
				reader.undeleteAll();
				reader.close();
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	
		//清空回收站,强制优化
		public void forceDelete()
		{
			IndexWriter writer=null;
			try {
				writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36,
						new StandardAnalyzer(Version.LUCENE_36)));
				//参数十一个选项,可以是一个query,也可以是一个term  term就是一个精确查找的值
				//此时删除的文档并未完全删除,而是存储在回收站中,可以恢复的
				writer.forceMergeDeletes();
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (LockObtainFailedException e) {
				e.printStackTrace();
			} catch (IOException e) {
			    e.printStackTrace();
			}
			finally{
				if (writer!=null) {
					try {
						writer.close();
					} catch (CorruptIndexException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
		
		public void merge()
		{
			IndexWriter writer=null;
			try {
				writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36,
						new StandardAnalyzer(Version.LUCENE_36)));
				
				writer.forceMerge(2);
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (LockObtainFailedException e) {
				e.printStackTrace();
			} catch (IOException e) {
			    e.printStackTrace();
			}
			finally{
				if (writer!=null) {
					try {
						writer.close();
					} catch (CorruptIndexException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
		
		public void delete()
		{
			IndexWriter writer=null;
			try {
				writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36,
						new StandardAnalyzer(Version.LUCENE_36)));
				//参数十一个选项,可以是一个query,也可以是一个term  term就是一个精确查找的值
				//此时删除的文档并未完全删除,而是存储在回收站中,可以恢复的
				writer.deleteDocuments(new Term("id","1"));
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (LockObtainFailedException e) {
				e.printStackTrace();
			} catch (IOException e) {
			    e.printStackTrace();
			}
			finally{
				if (writer!=null) {
					try {
						writer.close();
					} catch (CorruptIndexException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
		public void index()
		{
			   IndexWriter writer=null;
			   Document doc=null;
			   try {
				writer =new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_36, 
						   new StandardAnalyzer(Version.LUCENE_36)));
				//writer.deleteAll();
				for(int i=0;i<ids.length;i++)
				{
					doc=new Document();
			    	doc.add(new Field("id",ids[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
			    	doc.add(new Field("emails",emails[i],Field.Store.YES,Field.Index.NOT_ANALYZED));
			    	doc.add(new Field("contents",contents[i],Field.Store.YES,Field.Index.ANALYZED));
			    	doc.add(new Field("name",names[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
			    	writer.addDocument(doc); 
				}
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (LockObtainFailedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			   finally{
				   if(writer!=null)
				   {
					  try {
						writer.close();
					} catch (CorruptIndexException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}   
				   }
			   }
		}
       //更新索引
		public void update()
		{
			/*lucene本身不支持更新
			 * 
			 * 通过删除索引然后再建立索引来更新
			 */
			  IndexWriter writer=null;
			   Document doc=null;
			   try {
				writer =new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_36, 
						   new StandardAnalyzer(Version.LUCENE_36)));
				writer.deleteAll();
				for(int i=0;i<ids.length;i++)
				{
					doc=new Document();
			    	doc.add(new Field("id",ids[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
			    	doc.add(new Field("emails",emails[i],Field.Store.YES,Field.Index.NOT_ANALYZED));
			    	doc.add(new Field("contents",contents[i],Field.Store.YES,Field.Index.ANALYZED));
			    	doc.add(new Field("name",names[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
			    	writer.updateDocument(new Term("id","1"), doc); 
				}
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (LockObtainFailedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			   finally{
				   if(writer!=null)
				   {
					  try {
						writer.close();
					} catch (CorruptIndexException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}   
				   }
			   }	
		}
}


//测试类
package org.se.lucene;

import org.junit.Test;

public class test {

	@Test
	public void testIndex()
	{
		lucene_index l_index=new lucene_index();
		l_index.index();
    }
	@Test
	
	public void testquary()
	{
		lucene_index l_index=new lucene_index();
		l_index.quary();
	}
	@Test
	public void testDelete()
	{
		lucene_index l_index=new lucene_index();
		l_index.delete();
	}
	@Test
	public void testunDelete()
	{
		lucene_index l_index=new lucene_index();
		l_index.undelete();
	}
	@Test
	public void testForceDelete()
	{
		lucene_index l_index=new lucene_index();
		l_index.forceDelete();
	}
	@Test
	public void testmerge()
	{
		lucene_index l_index=new lucene_index();
		l_index.merge();
	}
	
	@Test
	public void upDate()
	{
		lucene_index l_index=new lucene_index();
		l_index.update();
	}
	
}


rk3588平台USB 3.0 -OAK深度相机适配方法 摘要:本文记录了OAK摄像头设备的配置与测试流程。主要内容包括:1)添加USB设备udev规则;2)拉取相关依赖库;3)安装Python3和pip;4)安装项目依赖;5)安装FFmpeg工具;6)测试摄像头功能并转换视频格式;7)将测试视频拷贝到U盘查看。操作步骤涵盖了从设备驱动配置到功能测试的完整流程,提供了详细的命令行操作指引。通过该文档可快速完成OAK摄像头的环境搭建和基础功能验证。 阅读详情

相关推荐

刷题单向链表

实现一个数据结构,维护一张表(最初只有一个元素 11)。接下来 qq 行,每行表示一次操作,操作具体间题目描述。a[i] 里面放的是下一个元素,为0代表链表结束。如单链表1->4 -> 2->3->0用数组表示是。对于每个操作 2,输出一个数字,用换行隔开。第一行一个整数 qq 表示操作次数。

power的专栏 1714

Lucene3.0.2之IndexWriter之updateDocument无法更新索引之解决方法

很郁闷的搞了好几天,各大搜索引擎都用遍了,还差点对互联网绝望。到最终发现是自己错了。我用IndexWriter 追加索引(IndexWriter.addDocument),删除索引(IndexWriter.deleteDocuments)都可以实现,但是用IndexWriter.updateDocument 来做索引的更新就一直实现不了。代码如下:Document doc = new

阳光宅男 4988

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 217

2、学习lucene之索引删除、恢复删除、强制删除

本来想在这篇里把索引的优化和更新一起写,但写完标题后发现标题好长,所以在这里就暂时只写关于索引删除的内容吧。因为小弟学的也不深,所以写的也有些简单,还望见谅。         一、索引删除         关于索引删除,有两个类都可以完成,IndexWriter和IndexReader。当我了解到这个问题时,纠结了半天到底用哪个,后来问了谷老师,他帮我找到了答案,最好是用IndexWriter

代码空间,程序家园 2767

CircuitBreaker Resilience4J 介绍

在分布式环境中,我们的应用可能会面临着各种各样的可恢复的异常(比如超时,网络环境异常),此时我们可以利用不断重试的方式来从异常中恢复(Retry Pattern),使整个集群正常运行。然而,也有一些异常比较顽固,突然发生,无法预测,而且很难恢复,并且还会导致级联失败(举个例子,假设一个服务集群的负载非常高,如果这时候集群的一部分挂掉了,还占了很大一部分资源,整个集群都有可能遭殃)。如果我们这时还是不断进行重试的话,结果大多都是失败的。

zzhongcy的专栏 3539

Xilinx UltraScale+ FPGA实战:手把手教你实现USB3.0设备开发(附原理图+代码)

本文详细介绍了如何使用Xilinx UltraScale+ FPGA开发USB3.0设备,涵盖硬件设计、Vivado工程配置、Petalinux系统定制及功能测试全流程。通过实战案例和优化技巧,帮助开发者快速掌握高速数据传输实现方法,提升嵌入式系统开发效率。

weixin_29159995的博客 209

【Lucene总结-索引】4.lucene索引的删除和更新

接上篇《3.lucene索引创建-域选项》 注:演示程序的lucene版本为8.0.0 上一篇我们进行了索引的域选项的讲解,以及对生成的索引文件的类型进行了解释,本篇继续来讲解对于索引的删除与更新操作。 一般系统存储的文件信息,有可能会被删除和更新,那么相关的索引文件也要进行删除和更新操作,来保证全文检索结果的正确性、实时性。 一、删除索引 下面我们来编写删除索引的代码: public ...

程序猿之洞 2960

无源低通滤波器

无源RC滤波器“滤除”不需要的信号,因为它们分离并允许仅通过其频率的正弦输入信号,最简单的是无源低通滤波器网络。在低频应用(高达100kHz)中,无源滤波器通常使用简单的RC(电阻-电容)网络构建,而高频滤波器(高于100kHz)通常由RLC(电阻-电感-电容)元件制成。无源滤波器由电阻器、电容器和电感器等无源元件组成,没有放大元件(晶体管、运算放大器等),因此没有信号增益,因此它们的输出电平始终小于输入。滤波器是根据它们允许通过它们的信号的频率范围来命名的,同时阻挡或“衰减”其余部分。

weixin_44448586的博客 1万+

Lucene中索引的删除,更新与查找以及恢复(lucene3.5)

package org.itat.text1; import java.io.File; import java.io.IOException; import javax.management.Query; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document

Lves Li的专栏 2498

西门子S7-200 SMART控制步进电机(二)

目录 一、开环运动控制方法 二、运动轴概述 三、配置运动控制向导 一、开环运动控制方法 S7-200 SMART CPU提供三种开环运动控制的方法: 1、脉冲宽度调制(PWM):内置于CPU中,用于速度、位置或占空比的控制 2、脉冲串输出(PTO):内置于CPU中,用于指定长度脉冲或指定距离的控制 3、运动轴:内置于CPU总,用于速度和位置的控制。本文所讲的就是通过运动轴实现步进电机的运动控制。 SR20和ST20 CP...

qq_43134642的博客 2万+

R语言导入.dta文件实战

R语言导入.dta文件实战 #导入.dta文件的基本语法 R的导入.dta文件最简单方法是使用haven库中的read_dta()函数。 此函数使用以下基本语法: data <- read_dta('C:/you-path/file_name.dta') #包的安装和导入 install.packages('haven') library(haven) #下载.dta数据文件 我们将从该页面下载名为cola.dta的.dta文件。 #导入.dta文件 ..

data+scenario+science+insight 1万+

lucene索引删除,恢复,更新

package org.se.lucene; //主类 import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache

KarlDoenitz的专栏 1万+

TripoSR: Fast 3D Object Reconstruction from a Single Image 论文阅读

模型的主要参数,如变换器的层数、三平面的维度、NeRF模型的具体细节和主要训练配置,在表1中详细说明。TripoSR的算法流程结合了先进的数据处理、模型设计和训练技术,使其能够在不到0.5秒的时间内从单张图像中快速生成详细的3D网格。总体而言,TripoSR是一个强大的3D重建工具,它在速度和质量上都表现出色,但也需要考虑到其对计算资源的需求和在处理极端复杂场景时可能遇到的挑战。:通过精心策划的训练数据集和多样化的数据渲染技术,TripoSR提高了模型的泛化能力和对真实世界图像的适应性。

Christo的博客 1946

[lucene]11.lucene索引的删除和更新

publicstaticvoiddeleteIndex()throwsException{ Directorydirectory=FSDirectory.open(Paths.get("D:\\Freemarkfiles\\lucene01")); SmartChineseAnalyzeranalyzer=newSmartChineseAn...

xiaozhuangyumaotao的博客 330

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

lucene-索引文档的删除、更新及增强加权

1、删除1)使用IndexReader类实现,这个类并没有立即从索引中删除文档,而只是在这些文档上加一个删除标记,直到IndexReader调用close()后才真正将它们删除。2)maxDoc()返回下一个可得到的文档的内部编号。numDocs()返回索引中的文档数量。 文档编号从0开始3)public class DocumentDeleteTest extends

深未来技术 691

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Lucene教程(四) 索引的更新和删除

这篇文章是基于上一篇文章来写的,使用的是IndexUtil类,下面的例子不在贴出整个类的内容,只贴出具体的方法内容。 3.5版本: 先写了一个check()方法来查看索引文件的变化: /** * 检查一下索引文件 */ public static void check() { IndexReader indexReader = null;

三丰的专栏 8657

Lucene入门之索引的管理

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

snowteng17的专栏 1180

Lucene笔记04-Lucene索引的删除与更新

一、删除索引 public void delete() { IndexWriter indexWriter = null; try { indexWriter = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUC...

王劭阳的博客 822

Lucene索引删除、更新、恢复和加权操作

Lucene索引删除、更新、恢复和加权操作

高興 1097

Lucene3.5 之 索引删除和更新

package com.ethan.index; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucen

ETHAN IN IT 3751

lucene(四):删除和更新索引

public static void deleteIndex() throws Exception{ Directory directory = FSDirectory.open(Paths.get("D:\\Freemarkfiles\\lucene01")); SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer(); IndexWriterConfig conf=new IndexWriterConfi

buyechengh的博客 931

Lucene3.5 的索引的创建,删除,更新,加权

==注意:在涉及到删除,更改之类的改变索引的操作时,要先重新创建一遍索引,然后再执行相关方法才可以看到效果,否则索引仍然是之前的 1. 索引的创建 (1). 第一步先创建模拟的内容,用于创建索引 private String[] ids = {"1","2","3","4","5"}; private String[] names = {"zhi","dan","feng","zhida

zhidanfeng的专栏 867

Lucene - 索引库的维护与查询

document.add(new TextField("content", "2013年11月18日 - Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。document.add(new TextField("content", "新添加的文档的内容第二个content", Store.YES));添加索引:向索引库中添加filename为test,content为www.educoder.net的索引。

2302_77385038的博客 960

Lucene小练四——为数字和日期添加索引

//主程序 package org.se.lucene; import java.io.File; import java.io.IOException; //import java.sql.Date; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.

Smallearth的专栏 3716

4、学习Lucene3.5之索引删除、更新

(1)删除索引 /** * 删除索引 */ public void deleteIndex(){ IndexWriter indexWriter = createIndexWriter(); /** * deleteDocuments()参数解析: * 第一种:Term term 删除特定的索引(

panchang199266的博客 339
上一篇: Lucene小练二(还是索引)
下一篇: Lucene小练三——索引删除,恢复,更新
S孙大宝
博客等级 码龄15年 55粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值