`

lucece 对txt建立索引并且查询的案例

阅读更多
package case1;

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

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateField;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;

public class IndexFiles {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
	
		File   indexDir = new File("C:\\luceneIndex");
		try {
			IndexWriter writer=new IndexWriter(indexDir,new StandardAnalyzer(),true);
			File files=new File("D:\\chenzk\\lucene");//要对这个文件目录下的所有文件建立索引,保存在indexDir中
			String [] Fnamelist=files.list();
			for(int i=0;i<Fnamelist.length;i++)
			{
				File file=new File(files,Fnamelist[i]);
				
				Document doc=new Document();
				Field fld=Field.Text("path",file.getPath());
				doc.add(fld);
				fld=Field.Keyword("modified",DateField.timeToString(file.lastModified()));
			    doc.add(fld);
				//下面很重要要将查询的东西保存索引文件中去  文件内容
			    FileInputStream in = new FileInputStream(file);
			    Reader reader = new BufferedReader(new InputStreamReader(in));
			    fld = Field.Text("contents", reader);
			    doc.add(fld); 

				writer.addDocument(doc);
				System.out.println("Added:"+doc.get("path"));
				//索引中有3个字段 文件路径,最后修订时间,文件内容
				
			}
		    writer.optimize();
		    writer.close();
		    System.out.println(" Has Added Total "+Fnamelist.length);
		
		
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
		
		
	}

}

  以上对文件目录建立索引的过程

 

package case1;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;

public class SearchFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		Analyzer  anlzr=new StandardAnalyzer();
     
		try {
			Query q=QueryParser.parse("java","contents",anlzr);
		    System.out.println(" Searching for :"+q.toString("contents")) ;
		    
		    Searcher serch=new IndexSearcher("C:\\luceneIndex");//索引所在的目录
		    Hits hts=serch.search(q);
		    for(int i=0;i<hts.length();i++)
		    {
		    	Document doc=hts.doc(i);
		    	String path=doc.get("path");
		    	System.out.println("Find "+i+":" +path);
		    	System.out.println("Find :"+doc.get("modified"));
		    	System.out.println("Find: " + doc.get("contents"));

		    	
		    }
		    System.out.println("Find Total: " + hts.length());

		
		} catch (ParseException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
		
		
		
	}

}

 

以上是对索引中关键字查询的过程

 

下面是将索引放在内存中的案例:

package case2;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.DateField;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

public class IndexTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		try {
			Directory directory = new RAMDirectory();// 将索引放在内存中
			Analyzer analyzer = new SimpleAnalyzer();

			IndexWriter writer = new IndexWriter(directory, analyzer, true);
			String[] docs = { "a b c d e", "a b c d e a b c d e",
					"a b c d e f g h i j", "a c e", "a c e a c e",
					"a c e a b c" };
			for (int j = 0; j < docs.length; j++) {
				Document d = new Document();
				d.add(Field.Text("contents", docs[j]));
				writer.addDocument(d);
			}
			writer.close();
			// 以上是生成索引
			Searcher searcher = new IndexSearcher(directory);
			String[] queries = { "a ", };
			Hits hits = null;
			QueryParser parser = new QueryParser("contents", analyzer);
			parser.setPhraseSlop(0);

			for (int j = 0; j < queries.length; j++) {
				Query query = parser.parse(queries[j]);
				System.out.println("Query :" + query.toString("contents"));
				hits = searcher.search(query);
				// 以上是初始化查询,分析编号1,2
				System.out.println(hits.length() + " total results");

				for (int i = 0; i < hits.length() && i < 10; i++) {
					Document d = hits.doc(i);

					System.out.println(i + "  " + hits.score(i) + "  " + " "
							+ d.get("contents"));

				}

			}
			searcher.close();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		} catch (ParseException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}

	}

}

 

 

 

分享到:
评论

相关推荐

    lucece建立索引过程

    用的是lucene-1.4.3.jar 博文链接:https://beyondsanli.iteye.com/blog/202777

    Lucene介绍+源码解读+功能分析

    - **关键词处理**:对用户的查询关键词进行同样的预处理步骤,如分词、去除停用词等。 - **索引查询**:利用处理后的关键词在索引中进行查找。 - **结果返回**:从匹配的文档中提取所需信息并呈现给用户。 #### ...

    Lucene 原理与代码分析完整版.pdf

    **第二步:** 对查询语句进行词法和语法分析,以及语言处理,将其转化为机器可以理解的形式。 - **词法分析**:识别关键词和特殊符号。 - **语法分析**:根据语法规则构建查询语法树。 - **语言处理**:类似于索引...

    完整的污水处理项目:WinCC 7.0带西门子300程序及中文注释的工艺流程

    内容概要:本文详细介绍了一个完整的污水处理自动化控制系统,该系统基于WinCC 7.0和西门子S7-300 PLC构建。文中涵盖了从数据采集、处理到报表生成的全过程,尤其强调了详细的中文注释和实用的技术细节。具体包括:PLC程序中的液位值滤波、WinCC画面中的阀门开度设置校验、报表模块的时间戳命名技巧以及报警记录的画面分层显示等。此外,还介绍了工艺流程图的动态效果、PID控制参数整定、数据归档处理等多个方面的技术和实践经验。 适用人群:从事自动化控制领域的工程师和技术人员,尤其是熟悉WinCC和西门子PLC的从业者。 使用场景及目标:适用于污水处理厂或其他类似工业环境的自动化控制系统设计与维护。主要目标是提高系统的可靠性和可维护性,确保操作的安全性和高效性。 其他说明:本文不仅提供了具体的代码实现和配置方法,还分享了许多宝贵的实战经验和注意事项,如防止误操作的设计、优化系统性能的方法等。这些内容对于理解和掌握工业自动化控制系统的实际应用非常有帮助。

    2025年中央电大计算机专业毕业论文.doc

    2025年中央电大计算机专业毕业论文.doc

    COMSOL空气流注放电模型——集成针-针电极及Helmholtz光电离过程等离子体模拟新范式

    内容概要:本文详细介绍了如何利用COMSOL的等离子体模块构建针-针电极间的空气流注放电模型。主要内容涵盖了几何结构的定义、物理场配置(如电子、正负离子的载流子选择)、化学反应的设定(包括21组带电粒子反应)以及Helmholtz光电离过程的具体实现方法。文中还提供了多个代码片段用于解释各个步骤的操作方式,并强调了求解器配置和边界条件处理的关键点。此外,作者分享了一些实用的小技巧,如初始步长设置、网格细化等,以确保模型能够稳定收敛并得到合理的仿真结果。 适合人群:从事等离子体物理研究的专业人士,特别是那些对高压放电现象感兴趣的科研工作者和技术人员。 使用场景及目标:适用于希望深入了解和模拟针-针电极间空气流注放电行为的研究项目。通过该模型可以更好地理解电场分布、粒子密度变化等微观物理过程,从而为实际工程应用提供理论支持。 阅读建议:由于涉及较多的技术细节和数学公式,建议读者具备一定的电磁学、流体力学基础知识,并且最好有一定的COMSOL软件使用经验。同时,在实践中可以根据自己的研究方向调整模型参数进行探索。

    组态王仿真学习案例:石灰石断烧系统详解,实时历史曲线记录、报表分析与报警管理一网打尽,入门到进阶全功能展示

    内容概要:本文详细介绍了利用组态王进行石灰石煅烧系统的仿真开发,涵盖实时曲线绘制、报警系统配置、报表生成功能等多个方面。文章从实际案例出发,通过具体的代码片段和操作步骤,讲解了如何实现温度PID控制、设备联锁、能源统计等功能。同时,作者分享了许多实践经验,如解决曲线不刷新问题、优化报警逻辑、提高报表生成效率等,帮助读者快速掌握组态王的核心技术和应用场景。 适合人群:对工业自动化感兴趣的初学者以及希望深入了解组态王使用的工程师。 使用场景及目标:适用于需要构建工业控制系统仿真模型的学习者或开发者,旨在通过实例演练提升对组态王的理解和运用能力,最终能够独立完成类似项目的开发。 其他说明:文中提供了丰富的代码示例和技术细节,有助于读者更好地理解和实践。此外,还特别强调了一些常见的错误和注意事项,如控件命名规范、数据源绑定规则等,确保项目顺利实施。

    2025年电大《计算机》统考操作题流程.doc

    2025年电大《计算机》统考操作题流程.doc

    中国人口省际迁移流动分量辨识数据集 (2010-2020)

    作者以中国省际迁移流动人口为研究对象,基于人口普查、就业统计数据,构建辨识省际人口迁移流动分量模型,计算出了中国分省人口增长的全要素平衡表,分析了人口增长的要素组合类型及其区域分布特征,得到中国人口省际迁移流动分量辨识数据集(2010-2020)。数据集内容包括:(1)2010-2020 年中国分省份人口增长全要素平衡表数据;(2)2010-2020 年中国分省份人口流入率与流出率的对数数据。该数据集存储为.xlsx格式,1个数据文件,数据量为16.2 KB。基于该数据集的分析研究成果拟发表在《地理学报》2024年79卷第8期。丁金宏, 常亮, 陈益豪等. 人口流动分析范式及中国人口省际迁移流动分量辨识[J]. 地理学报, 2024, 79(8): 1883-1897.

    基于Simulink的底层模型构建与代码生成系统:DBC自动导入、硬件信号支持

    内容概要:本文深入探讨了Simulink If模块在嵌入式系统开发中的强大功能,特别是在汽车电子领域的应用。主要介绍了两种核心技术:一是DBC文件的自动导入生成模型及代码,二是硬件信号的导入生成模型及代码。DBC文件的自动导入能够快速构建CAN总线通信模型,简化信号解析和报文处理,生成的代码可以直接应用于AUTOSAR架构,实现ASW和BSW的无缝对接。硬件信号导入功能则允许开发者轻松地将硬件设备产生的信号集成到Simulink模型中,自动生成带有信号处理逻辑的代码,适用于实时数据采集和控制算法实现。此外,文中还详细展示了具体的MATLAB代码示例,解释了关键步骤和技术细节。 适合人群:从事嵌入式系统开发、汽车电子开发的工程师和技术人员,尤其是那些希望提高开发效率、减少手动配置工作的专业人士。 使用场景及目标:① 快速搭建基于DBC文件的CAN通信模型,自动生成符合AUTOSAR标准的代码;② 实现硬件信号的实时处理和控制,如数据采集、信号滤波等;③ 提升开发效率,缩短项目周期,降低错误率。 其他说明:文中提到的技术不仅限于汽车电子领域,也可广泛应用于工业自动化和其他需要复杂信号处理和实时控制的场合。

    2023年通信工程师综合能力真题.docx

    2023年通信工程师综合能力真题.docx

    H9000与水电厂综合自动化回顾.docx

    H9000与水电厂综合自动化回顾.docx

    永磁同步电机无传感器控制仿真:高频注入法

    内容概要:本文详细介绍了永磁同步电机无传感器控制中高频注入法的实现原理及其优化方法。首先解释了高频注入的基本概念,即通过向电机注入高频正弦电压信号,利用电机的凸极效应获取转子位置信息。接着展示了具体的MATLAB/Simulink实现步骤,包括高频信号生成、带通滤波器设计、信号解调以及位置估算等关键技术环节。文中还讨论了常见问题及解决方案,如参数匹配、滤波器设计、锁相环参数调整等,确保系统的稳定性和精度。 适合人群:从事电机控制系统研究与开发的技术人员,尤其是对永磁同步电机无传感器控制感兴趣的工程师。 使用场景及目标:适用于需要进行永磁同步电机无传感器控制仿真的场合,旨在提高低速工况下的转子位置估计算法性能,减少对外部传感器的依赖,降低成本并提升系统可靠性。 其他说明:文中提供了大量MATLAB代码示例,帮助读者更好地理解和应用相关理论和技术。同时强调了实际调试过程中需要注意的关键点,为后续实验提供指导。

    EET单部六层电梯运行程序

    EET单部六层电梯运行程序

    2025年冬西交《VisualFoxpro及其应用》在线作业满分答案.doc

    2025年冬西交《VisualFoxpro及其应用》在线作业满分答案.doc

    PT100(RTD)三线制与四线制测量方案升级版(STM32F103C8T6主控芯片)”

    内容概要:本文详细介绍了使用STM32F103C8T6作为控制器,结合AD7793 24位Σ-Δ ADC实现PT100温度测量的硬件设计和软件实现。主要内容涵盖三线制和四线制测量方案对比、硬件电路设计要点(如激励电流配置、引线电阻补偿)、按键处理机制(状态机+FIFO队列)、查表法优化温度转换速度以及4-20mA变送输出电路的设计。文中还提供了详细的代码片段,展示了如何通过寄存器配置实现不同的测量模式,并讨论了实际应用中的注意事项和技术难点。 适合人群:嵌入式系统开发工程师、工业自动化领域的技术人员、对高精度温度测量感兴趣的电子爱好者。 使用场景及目标:适用于需要精确温度测量的应用场合,如工业控制系统、实验室环境监测等。目标是帮助读者掌握PT100温度传感器的工作原理及其在不同布线方式下的性能表现,提高系统的可靠性和准确性。 其他说明:文中提到的技术细节对于理解和改进现有温度测量系统非常有价值,特别是关于硬件选型、软件算法优化等方面的内容。此外,提供的源码和电路图可以帮助读者快速搭建实验平台进行验证。

    2023年软件测试外包揭秘我是一个二手的程序员ITeye技术网站.doc

    2023年软件测试外包揭秘我是一个二手的程序员ITeye技术网站.doc

    埃斯顿伺服控制器C代码与硬件全套解析:TMS320F28335+FPGA源码、AD电路图、驱动与通信功能

    内容概要:本文深入探讨了埃斯顿伺服控制器的软硬件设计及其量产方案。主要内容涵盖三个方面:一是代码层面,详细介绍了TMS320F28335的C代码实现,包括电机参数自动识别算法、MODBUS和CANopen通讯协议的实现;二是硬件图纸,展示了AD电路图、PCB图以及不同功率驱动板的设计特点;三是通讯功能,阐述了MODBUS和CANopen协议的具体实现方法。此外,还讨论了量产技术生产方案,强调了原材料选择、生产工艺控制、代码审查优化及严格的测试流程。这些内容不仅揭示了伺服控制器的工作原理和技术细节,也为相关领域的开发者提供了宝贵的参考资料。 适合人群:从事伺服控制系统开发的研究人员、工程师和技术爱好者,尤其是那些对工业自动化领域感兴趣的从业者。 使用场景及目标:帮助读者深入了解伺服控制器的内部工作机制,掌握其核心技术和实现方法,从而能够应用于实际项目中,提高产品的性能和稳定性。具体目标包括但不限于:理解电机参数自动识别算法、掌握MODBUS和CANopen通讯协议的实现、熟悉不同功率驱动板的设计特点、了解量产技术生产的关键环节。 其他说明:文中提供的代码片段和硬件设计细节有助于读者快速上手实践,同时附带的实际案例和注意事项也能为开发过程提供指导。

    上海市不同出行方式的通勤效率数据集(2015)

    作者基于2015年1%人口抽样调查街道尺度的通勤行为数据,采用过剩通勤指标,从平均通勤距离和空间组织两个视角,分析了上海居民出行的通勤效率及其群体异质性,得到上海不同出行方式的通勤效率数据集(2015)。数据集内容包括2015年上海市以下数据:(1)各街道通勤量;(2)不同学历群体的通勤出行方式及占比;(3)不同学历群体不同出行方式的通勤效率;(4)不同学历群体不同出行方式的实际通勤流数据。该数据集存储为.xlsx格式,1个数据文件,数据量为15.5 MB。基于该数据集的研究论文发表在《地理研究》2024年43卷2期。岳丽莹, 朱宇, 李开明. 双视角、双维度下超大城市的通勤效率: 以上海市为例[J]. 地理研究, 2024, 43(2): 429-445.

    彩虹易支付最新升级版源码下载/BUG修复与订单投诉功能增强

    彩虹易支付最新升级版源码下载/BUG修复与订单投诉功能增强。该系统也没版本号,此版本目前是比较新的版本,增加了订单投诉功能,和一个好看的二次元模板。 此版本是全开源版,无一处加密文件

Global site tag (gtag.js) - Google Analytics