`

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

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

    asp.net很好的美容院管理系统(源代码+论文+需求分析+开题报告)(20247d).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    vb信息管理系统(源代码+论文)(202488).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB+SQL自动点歌系统(源代码+系统+外文翻译)(2024lt).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    ASP.NET基于Web Mail收发系统设计与开发(源代码+论文)(2024oj).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT

    毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT,个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设计基于Python+OpenCV智能答题卡识别系统源码+报告答辩PPT毕业设

    vb教学辅助系统(源代码+可执行文件+论文)(2024nh).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    2-一个可以一键合并工作薄的小程序,并把数据导出到word表格

    python写的一个合并表格工具,可以把文件夹内多个表格按行堆叠合并一个新的表格,简单好用。代码结尾附打包exe命令。

    电子学习资料设计作品全资料多点温度检测系统设计资料

    电子学习资料设计作品全资料多点温度检测系统设计资料提取方式是百度网盘分享地址

    ASP.NET基于BS方式的即时通讯软件的设计与实现(源代码+论文)(2024bu).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    电子学习资料设计作品全资料基于单片机的电集中抄表设计资料

    电子学习资料设计作品全资料基于单片机的电集中抄表设计资料提取方式是百度网盘分享地址

    VT-JQR1000工业机器人基础教学实训台图片1.jpg

    VT-JQR1000工业机器人基础教学实训台图片1

    第二届CCF“司南杯”量子计算编程挑战赛专业组-量子机器学习赛道初赛题目分析与解答.zip

    第二届CCF“司南杯”量子计算编程挑战赛专业组-量子机器学习赛道初赛题目分析与解答.zip 【资源说明】 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 6、欢迎下载,沟通交流,互相学习,共同进步!

    【未发表】基于人工蜂鸟优化算法AHA优化集成学习结合鲁棒极限学习机RELM-Adaboost实现负荷数据回归预测算法研究附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    2-记录料理心得,规划用餐计划-家庭厨子的福音

    是用于保存菜谱的笔记软件。可以创建自己的菜谱,对菜谱进行调整。同时,这些菜谱还能用来规划用餐计划,生成采购清单等等。支持多端云同步

    电子学习资料设计作品全资料多功能工业控制平台

    电子学习资料设计作品全资料多功能工业控制平台提取方式是百度网盘分享地址

    VB学生成绩管理系统 吕丽萍VB(2024sf).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB酒店服务管理系统设计(源代码+系统)(2024fw).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

Global site tag (gtag.js) - Google Analytics