Lucene小练八(实现了索引和搜索)

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载
//主类

package Java.se.lucene;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericField;
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.StaleReaderException;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;


public class index {
	private String[] ids={"1","2","3","4","5","6"};
	private String[] emails={"aa@aa.com","bb@bb.com",
			"cc@cc.com","dd@dd.com","ee@ee.com","ff@ff.com"};
	private String[] contents={"i like  gdsfgfds","i like fsdfs","i like fdsfsd",
			"i like fdsfsd","i like like fdfs","i like like like fsefsdfg"};
	private int[] attachs={1,2,3,4,5,6};
	private String[] names={"liwu","zhangsan","xiaoqinag","laona",
			"dabao","lisi"};
	private Directory directory=null;
	private IndexWriter writer=null;
	private Date[] dates=null;
	private Map<String,Float> scores=new HashMap<String,Float>();
	private static IndexReader reader=null;
	
	public index()
	{
		setDate();//创建日期
		try {
			scores.put("aa.com", 2.0f);
			scores.put("bb.com", 1.0f);
			scores.put("cc.com", 3.0f);
			scores.put("dd.com", 4.0f);
			scores.put("ee.com", 5.0f);
			scores.put("ff.com", 6.0f);
		  // directory=new RAMDirectory();//从内存打开Directory
		    Index();
		//从硬盘打开Directory
		    directory=FSDirectory.open(new File("f:/lucene/Index04"));
		//	reader=IndexReader.open(directory);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//建立索引
	public void Index()
	{
		Document document=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++)
			{
				document=new Document();
				document.add(new Field("id", ids[i], 
						Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS  ));
				document.add(new Field("email",emails[i],
						Field.Store.YES,Field.Index.NOT_ANALYZED));
				document.add(new Field("content", contents[i], 
						Field.Store.YES, Field.Index.ANALYZED));
				document.add(new Field("name",names[i],
						Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
		    	//为数字添加索引
				document.add(new NumericField("attach", Field.Store.YES,true).
						setIntValue(attachs[i]));
				//为日期添加索引
				document.add(new NumericField("date", Field.Store.YES,true)
				.setLongValue(dates[i].getTime()));//记住要getTime
						
				
		    	String str=emails[i].substring(emails[i].lastIndexOf("@")+1);
		    	System.out.println(str);
    		    if(scores.containsKey(str))
		    	{
		    		document.setBoost(scores.get(str));
		    	}else{
	    		document.setBoost(0.5f);
		    	}
		    	writer.addDocument(document);
		    	writer.commit();//提交writer
			}
		} 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{
            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 query()
	{
		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();
		}
	}
	 //用writer删除索引,但并没有完全删除,可以恢复的
	public void delete01()
	{
		try {
			writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36,
					new StandardAnalyzer(Version.LUCENE_36)));
			writer.deleteDocuments(new Term("id","1"));
		} 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{
			try {
				writer.close();
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	//用reader来删除

	//使用reader进行恢复
	@SuppressWarnings("deprecation")
	public void undelete()
	{
		IndexReader reader = null;
			try {
				reader = IndexReader.open(directory,false);
				reader.undeleteAll();
				reader.close();
			} catch (StaleReaderException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 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();
			}
	}
	//清空回收站
	public void forceDelete()
	{
		try {
			writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36,
					new StandardAnalyzer(Version.LUCENE_36)));
			writer.forceMergeDeletes();
		} 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{
			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 forceMerge()
    {
    	try {
			writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36,
					new StandardAnalyzer(Version.LUCENE_36)));
			writer.forceMerge(3);
		} 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{
			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()
    {
    	Document document=null;
        try {
			writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36,
				new StandardAnalyzer(Version.LUCENE_36)));
			/*
			 * lucene没有提供更新,只能先删除再添加
			 * 
			 */
			for(int i=0;i<ids.length;i++)
			{
				document=new Document();
				document.add(new Field("id", "11", 
						Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS  ));
				document.add(new Field("email",emails[0],
						Field.Store.YES,Field.Index.ANALYZED));
				document.add(new Field("content", contents[0], 
						Field.Store.NO, Field.Index.NOT_ANALYZED));
				document.add(new Field("name",names[0],
						Field.Store.YES,Field.Index.NOT_ANALYZED));
		    	writer.updateDocument(new Term("id","1"), document);
			}
		} 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{
           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 search01() 
    {
    	IndexReader reader=null;
		try { 	
			reader = IndexReader.open(directory);
			IndexSearcher searcher=new IndexSearcher(reader);
			TermQuery query=new TermQuery(new Term("content","like"));
			TopDocs tds =searcher.search(query, 10);
			for(ScoreDoc sdc:tds.scoreDocs)
			{
				Document document=searcher.doc(sdc.doc);
				System.out.println("("+sdc.doc+")"+document.get("name")+"["+document.get("email")+
						"]-->"+document.get("id")+"..."+document.get("attach")+"..."+document.get("date"));
			}
			reader.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
    
    public void search02() 
    {
    	//IndexReader reader=null;
		try { 	
			//reader = IndexReader.open(directory);
		    IndexSearcher searcher=getSearcher();
			TermQuery query=new TermQuery(new Term("content","like"));
			TopDocs tds =searcher.search(query, 10);
			for(ScoreDoc sdc:tds.scoreDocs)
			{
				Document document=searcher.doc(sdc.doc);
				System.out.println("("+sdc.doc+")"+document.get("name")+"["+document.get("email")+
						"]-->"+document.get("id")+"..."+document.get("attach")+"..."+document.get
						("date"));
			}
	        searcher.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
    //创建日期
    public void setDate()
    {
    	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-kk");
    	try {
    		dates=new Date[ids.length];
        	dates[0]=sdf.parse("2010-08-17");
        	dates[1]=sdf.parse("2011-02-17");
        	dates[2]=sdf.parse("2012-03-17");
        	dates[3]=sdf.parse("2011-04-17");
        	dates[4]=sdf.parse("2012-05-17");
        	dates[5]=sdf.parse("2011-07-17");
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
    } 
   //创建Searcher
    public IndexSearcher getSearcher()
    {
    	try {
			reader=IndexReader.open(directory);
		} catch (CorruptIndexException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

    	return(new IndexSearcher(reader));
     }
	
    
 }
//测试类

package Java.se.lucene;


import org.junit.Test;

public class Test_Index {
	@Test
	public void test_index() //测试索引
	{
		index ind=new index();
		ind.Index();
	}
	@Test
	public void test_query() //遍历
	{
		index ind=new index();
		ind.query();
	}
	@Test
	public void test_delete01() //删除索引
	{
		index ind=new index();
		ind.delete01();
	}

	@Test
	public void test_undelete() //恢复删除
	{
		index ind=new index();
		ind.undelete();
	}
	@Test
	public void test_forceDelete() //清空回收站站
	{
		index ind=new index();
		ind.forceDelete();
	}
	@Test
	public void test_forceMerge() //清空回收站站
	{
		index ind=new index();
		ind.forceMerge();
	}
	@Test
	public void test_update() //更新索引
	{
		index ind=new index();
		ind.update();
	}
	@Test
	public void test_search01() //更新索引
	{
		index ind=new index();
		ind.search01();
	}
	@Test
	public void test_search02() //更新索引
	{
		index ind=new index();
		for(int i=0;i<5;i++)
		{
			 ind.search02();
			 System.out.println("------------------------");
			  try {
				Thread.sleep(5000);	
			} catch (InterruptedException e) {
				e.printStackTrace();
			}	 
		}
	}
		

/*	public void check() throws IOException{						//检查索引是否被正确建立(打印索引)
		Directory directory = FSDirectory.open(new File("f:/lucene/Index04/"));//创建directory,其储存方式为在
		IndexReader reader = IndexReader.open(directory);
		for(int i = 0;i<reader.numDocs();i++){
			System.out.println(reader.document(i));
		}
		reader.close();
	}
		public static void main(String[] args) throws IOException {
			new index().check();
		}*/
}

2024 《计算机网络》实验教学指导书.doc 立即下载

相关推荐

PX4飞控 vs 大疆A3:开源与闭源方案在无人机硬件架构中的实战对比

本文深入对比了PX4飞控与大疆A3在无人机硬件架构上的差异,分析了开源与闭源方案在工业级无人机开发中的优劣势。通过详细的硬件配置、传感器兼容性、扩展能力及性能测试数据,为开发者提供选型指南,特别适合需要自定义算法和复杂功能集成的项目。

a3b4c5的博客 886

Lucene创建索引和搜索索引

寂寞灵魂 529

FPGA新手必看:用USB转TTL实现串口通信的完整流程(附CH340G电路详解)

本文为FPGA新手提供了通过USB转TTL模块实现串口通信的完整实战指南。详细解析了CH340G电路设计要点、硬件连接方法,并分享了经过验证的Verilog代码框架,帮助读者快速掌握FPGA与PC通信的核心技术,解决电平匹配与波特率设置等常见问题。

cake8的博客 1048

Lucene小练九——各种搜索(精确,范围,数字)

package Java.se.lucene; // 主类 import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.s

Smallearth的专栏 9084

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 339

【AI智能体】图像处理-生成营销 Banner 图

生成营销 Banner 图是一款用于制作营销图片的智能体,它可以根据指定的营销活动内容,快速生成活动 Banner 图片,降低活动运营成本、提高制图效率。

AI创变工坊,和1000万新个体创业者一起成长!愿大家都能跟上时代的洪流,不被社会淘汰,愿大家的生活工作收入都能具备竞争力! 1175

POI读取word

package Java.se.lucene; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermo

Smallearth的专栏 6358

详细指南:如何在TI C2000基于C28x的微控制器上部署FreeRTOS_C语言实现

FreeRTOS是一个小型、开源、实时的嵌入式操作系统内核。它为多种微控制器和处理器提供了支持,包括ARM、AVR、MSP430和PIC等。小型和轻量级:适合资源受限的嵌入式系统。实时性:可以满足严格的实时要求。多任务支持:支持多任务并发执行。内存管理:提供了多种内存管理策略。模块化设计:用户可以根据需要选择所需的功能模块。TI C2000系列微控制器是专为实时控制应用设计的。高性能C28x核:提供了高速的浮点运算能力。丰富的外设:包括PWM、ADC、DAC、通信接口等。低功耗。

qq_38334677的博客 1606

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

第14.7章 高翔博士最新开源框架Lightning-LM源码解读(七):PoseExtrapolator模块深度剖析,揭秘激光SLAM高频位姿外推核心技术

PoseExtrapolator是Lightning-LM框架中负责高频位姿外推的核心模块,通过融合DR(航位推算)、激光里程计和PGO(位姿图优化)数据实现精准实时定位。模块初始化依赖PGO数据,后续通过DR数据进行高频位姿更新,并利用PGO结果进行误差补偿。关键函数AddDRLocAndExtrapolate处理DR增量位姿,结合速度补偿机制逐步修正误差,保证高频输出的同时提升精度。该模块体现了多传感器融合思想,通过互补性数据(高频DR与低频高精PGO)实现鲁棒定位,代码中使用了SE3位姿表示、互斥锁保

行知SLAM 348

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟卷1及答案解析)

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟卷1及答案解析)

王老师青少年编程 2023

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

Smallearth的专栏 3133

【人工智能之深度学习】21. 自动驾驶感知实战:YOLOv4复杂天气优化方案(BDD100K全代码+效果对比)

摘要:自动驾驶摄像头在雨雾天气下易受图像模糊、目标遮挡影响,导致YOLOv4检测精度骤降。本文基于BDD100K公开数据集(含多天气场景),设计三阶段优化方案:1)物理建模生成雨雾效果(雨滴线条+大气散射模型),将恶劣天气样本占比从20%提升至40%;2)在YOLOv4颈部嵌入CBAM注意力机制,强化模糊区域特征提取;3)L1剪枝(30%)+TensorRT量化实现轻量化。需特别说明:本文为教学虚拟案例,不可直接用于车载部署,实际落地需结合多传感器融合与ISO 26262认证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1681

Lucene小练十二(分页搜索)

package Java.se.lucene; //创建索引 import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.documen

Smallearth的专栏 2839

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

Lucene小练十五(过滤器)

package Java.se.lucene; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org

Smallearth的专栏 2095

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Lucene小练七--(索引删除 清空 加权 排序)复习

package Java.se.lucene; //主类 import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.ap

Smallearth的专栏 2063

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Lucene小练十(八种搜索)

package Java.se.lucene; //主类 import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.st

Smallearth的专栏 1633

Lucene小练十三(IK分词器)

// if(hasNew) // { // writer.deleteAll(); // } //纠结一个问题,为啥这行不注释就不能正常运行呢 package Java.se.lucene; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyz

Smallearth的专栏 1587

Lucene小练十四(文件排序)

//建索引 package Java.se.lucene; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; impo

Smallearth的专栏 1490

lucene小练一__索引(想学点Lucene了)

文件放在F:/lucene/lucenes package org.lucene; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.l

Smallearth的专栏 1202

Lucene小练11(QueryPraser搜索--基本能实现各种搜索)

package Java.se.lucene; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.standa

Smallearth的专栏 1130

Lucene小练五(复习index)

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

Smallearth的专栏 1071

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.apac

Smallearth的专栏 1030

【搜索引擎】Lucene查询语法

Lucene 查询语法是 Elasticsearch 的底层查询语言,Kibana 的 Lucene 模式和 ES 的查询都基于此语法。

沉梦听雨的博客 69
上一篇: Lucene小练八(实现了索引和搜索)
下一篇: Lucene小练九——各种搜索(精确,范围,数字)
S孙大宝
博客等级 码龄15年 55粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值