Lucene学习笔记(一)

本文介绍如何使用Lucene进行文档索引及查询。通过实例演示了创建索引的过程,包括文件路径设置、文档转换、索引优化等关键步骤,并展示了如何进行高效检索。

这里主要介绍一下如何快速的学习开发自己的第一个Lucene程序

Lucene的开发主要分为两个步骤:

      1、对需要检索的数据创建索引

      2、根据关键字在索引查询到你需要的内容

 

首先我们来看一下如何利用Lucene创建索引:

 

public void createIndex() throws Exception {
		// 你需要检索的文件路径
		String filePath = "E:/work_cvs/itcastLucene/luceneDatasource/javadoc .txt";
		// 你的索引库存放的位置
		String indexPath = "E:/work_cvs/itcastLucene/luceneIndex/";
		// 索引库的目录
		Directory dir = FSDirectory.getDirectory(indexPath);
		// 将电脑上的文档转换为Lucene中的文档类型
		Document doc = File2DocumentUtils.file2Document(filePath);
		// Lucene索引流的输入对象
		IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(), MaxFieldLength.LIMITED);
		// 将文档对象加入到索引的输入流中
		indexWriter.addDocument(doc);
		
		// 合并优化索引
		indexWriter.optimize();
		// 关闭索引输入流
		indexWriter.close();
	}

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

public class File2DocumentUtils {
	/**
	 * 磁盘中的文件对象转化为Lucene的文档对象
	 * @param filePath
	 * @return
	 */
	public static Document file2Document(String filePath){
		File file = new File(filePath);
		
		Document doc = new Document();
		
		doc.add(new Field("name", file.getName(), Field.Store.YES, Field.Index.ANALYZED));
		doc.add(new Field("content", readFileContent(file), Field.Store.YES, Field.Index.ANALYZED));
		doc.add(new Field("size", file.length()+"", Field.Store.YES, Field.Index.NOT_ANALYZED));
		doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
		
		return doc;
	}
	
	/**
	 * <pre>
	 * 读取文件内容
	 * </pre>
	 * 
	 * @param file 要读取的文件
	 * @return 文件内容
	 */
	public static String readFileContent(File file){
		StringBuffer content = new StringBuffer();
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
			for(String line = null; (line = reader.readLine()) != null; ){
				content.append(line).append("\n");
			}
		} catch (FileNotFoundException e) {
			throw new RuntimeException(e.getMessage(), e);
		} catch (IOException e) {
			throw new RuntimeException(e.getMessage(), e);
		}
		return content.toString();
	}
	
	/**
	 * <pre>
	 * 获取 name 属性的值的两种方法:
	 * 1,Field f = doc.getField(&quot;name&quot;);
	 *    f.stringValue();
	 * 2,doc.get(&quot;name&quot;);
	 * </pre>
	 * 
	 * @param doc
	 */
	public static void printDocumentInfo(Document doc) {
		// Field f = doc.getField("name");
		// f.stringValue();
		System.out.println("------------------------------");
		System.out.println("name     = " + doc.get("name"));
		System.out.println("content  = " + doc.get("content"));
		System.out.println("size     = " + doc.get("size"));
		System.out.println("path     = " + doc.get("path"));
	}
}

 

下面是利用Lucene创建的索引库查询

public void search() throws Exception {
		// 待查询的关键字
		String queryString = "adddocument";
		// 构建一个查询解析器
		QueryParser queryParser = new MultiFieldQueryParser(new String[]{"name","content"}, new StandardAnalyzer());
		// 利用查询解析器构建查询对象
		Query query = queryParser.parse(queryString);
		// 构建索引查询对象
		IndexSearcher indexSearcher = new IndexSearcher(indexPath);
		Filter filter = null;
		// 查询出匹配的文档
		TopDocs topDocs = indexSearcher.search(query, filter, 10000);
		
		System.out.println("共搜索到【"+topDocs.totalHits+"】条匹配记录");
		// 展示查询结果
		for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
			int docSn = scoreDoc.doc;
			
			Document doc = indexSearcher.doc(docSn);
			
			File2DocumentUtils.printDocumentInfo(doc);
		}
	}

 

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕“需求响应动态冰蓄冷系统与需求响应策略的优化研究”展开,基于Matlab代码实现,重点探讨了冰蓄冷系统在电力需求响应背景下的动态建模与优化调度策略。研究结合实际电力负荷与电价信号,构建系统能耗模型,利用优化算法对冰蓄冷系统的运行策略进行求解,旨在降低用电成本、平衡电网负荷,并提升能源利用效率。文中还提及该研究为博士论文复现,涉及系统建模、优化算法应用与仿真验证等关键技术环节,配套提供了完整的Matlab代码资源。; 适合人群:具备定电力系统、能源管理或优化算法基础,从事科研或工程应用的研究生、高校教师及企业研发人员,尤其适合开展需求响应、综合能源系统优化等相关课题研究的人员。; 使用场景及目标:①复现博士论文中的冰蓄冷系统需求响应优化模型;②学习Matlab在能源系统建模与优化中的具体实现方法;③掌握需求响应策略的设计思路与仿真验证流程,服务于科研项目、论文写作或实际工程方案设计。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注系统建模逻辑与优化算法的实现细节,按文档目录顺序系统学习,并尝试调整参数进行仿真对比,以深入理解不同需求响应策略的效果差异。
综合能源系统零碳优化调度研究(Matlab代码实现)内容概要:本文围绕“综合能源系统零碳优化调度研究”,提供了基于Matlab代码实现的完整解决方案,重点探讨了在高比例可再生能源接入背景下,如何通过优化调度实现零碳排放目标。文中涉及多种先进优化算法(如改进遗传算法、粒子群优化、ADMM等)在综合能源系统中的应用,涵盖风光场景生成、储能配置、需求响应、微电网协同调度等多个关键技术环节,并结合具体案例(如压缩空气储能、光热电站、P2G技术等)进行建模与仿真分析,展示了从问题建模、算法设计到结果验证的全流程实现过程。; 适合人群:具备定电力系统、能源系统或优化理论基础,熟悉Matlab/Simulink编程,从事新能源、智能电网、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展综合能源系统低碳/零碳调度的科研建模与算法开发;②复现高水平期刊(如SCI/EI)论文中的优化模型与仿真结果;③学习如何将智能优化算法(如遗传算法、灰狼优化、ADMM等)应用于实际能源系统调度问题;④掌握Matlab在能源系统仿真与优化中的典型应用方法。; 阅读建议:建议结合文中提供的Matlab代码与网盘资源,边学习理论模型边动手调试程序,重点关注不同优化算法在调度模型中的实现细节与参数设置,同时可扩展应用于自身研究课题中,提升科研效率与模型精度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值