`

利用lucene对文件内容进行关键字检索

    博客分类:
  • Java
阅读更多

在具体实现之前,请根据自己的要求,建立对应的路径及文件。例如,我这边创建的路径及文件是:     D:/tools/LearningByMyself/lucene/source/demo1.txt

D:/tools/LearningByMyself/lucene/source/demo2.txt

D:/tools/LearningByMyself/lucene/index

 

第一步,建立索引,代码如下:

      

/**
   * @param sourceFile 需要添加到索引中的路径
   * @param indexFile  存放索引的路径
   * @throws Exception
   */
public static void textFileIndexer(String sourceFile,String indexFile)         throws Exception{
		File sourceDir = new File(sourceFile),
			 indexDir = new File(indexFile); 	
	 
		Directory dir =  FSDirectory.open(indexDir);
                Analyzer luceneAnalyzer = new   StandardAnalyzer(Version.LUCENE_36); 		
		IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,luceneAnalyzer); 		
		iwc.setOpenMode(OpenMode.CREATE); 
		IndexWriter indexWriter = new IndexWriter(dir,iwc);
     
        File[] textFiles = sourceDir.listFiles();       
        long startTime = new Date().getTime(); 
        
        for(int i=0;i<textFiles.length;i++){
        	if(textFiles[i].isFile() && textFiles[i].getName().endsWith(".txt")){
        		System.out.println("File--->" + textFiles[i].getCanonicalPath() + " 正在被索引.....");
        		String str_temp = fileReaderAll(textFiles[i].getCanonicalPath(),"UTF-8");
        		System.out.println("文件内容:" + str_temp);
        		
        		Document document = new Document();
        		Field field_path = new Field("path",textFiles[i].getCanonicalPath(),
        				Field.Store.YES,Field.Index.NO);
        		Field field_body = new Field("body",str_temp,Field.Store.YES,
        				Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
        		document.add(field_path);
        		document.add(field_body);
        		
        		indexWriter.addDocument(document);
        	}
        }
        
        indexWriter.close();
        
        long endTime = new Date().getTime();
        
        System.out.println("一共花费了" + 
               (endTime - startTime) + "毫秒将" + sourceDir.getPath() + "中的文件增加到索引里面去.....");
	}

 

private static String fileReaderAll(String filename,String charset) throws IOException{
		BufferedReader buffer_read = new BufferedReader(
				new InputStreamReader(new FileInputStream(filename),charset));
		String line = new String();
		String temp = new String();
		
		while((line = buffer_read.readLine()) != null){
			temp += line ;
		}
		
		buffer_read.close();
		
		return temp ;
	}

 第二步,在索引中检索关键字

 

    

/**
     * @param indexFile 索引所在的路径
     * @param keyWords  需要检索的关键字
     * @throws IOException
     * @throws ParseException
     */
     public static void queryKeyWords(String indexFile,String keyWords) throws IOException,ParseException{
    	IndexReader reader = IndexReader.open(
				FSDirectory.open(new File(indexFile)));
		IndexSearcher index_search = new IndexSearcher(reader);
									
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);				
	    QueryParser query_parser = new QueryParser(Version.LUCENE_36,"body",analyzer);	    
	    Query query = query_parser.parse(keyWords);
		
		if(index_search != null){
	    	TopDocs result = index_search.search(query, 10); //返回最多为10条记录
	    	ScoreDoc[] hits = result.scoreDocs;
	    	
	    	if(hits.length > 0){
	    		System.out.println("关键字:" + keyWords + ",在  " + indexFile + "中,一共检索到" + hits.length + "个...");
	    	}
	    	
	    	index_search.close();
	    }
    }

第三部,自己编写一个测试类,测试一下上面的两个方法,例如,我写的测试类如下:

 

   

public class LuceneTest {
	public static void main(String[] args) throws IOException,ParseException,Exception{
		String sourcePath = "D:/tools/LearningByMyself/lucene/source" ;
		String indexPath = "D:/tools/LearningByMyself/lucene/index" ;
		String key_words = "服务器" ;
		
		LuceneIndex.textFileIndexer(sourcePath, indexPath);
		LuceneIndex.queryKeyWords(indexPath, key_words);
		
	}
}

  最后,在控制台上查看结果。例如,我这边的测试结果如下:

 

    File--->D:\tools\LearningByMyself\lucene\source\demo1.txt 正在被索引.....

    文件内容:为了保证机房的网络安全,IDC内所有服务器不被允许从办公网直接ssh登录,必须通过跳板机 进行间接登录。用户通过跳板机执行的所有命令(包括通过跳板机登录的其他机器后的命令)都会被保存并审计。

    File--->D:\tools\LearningByMyself\lucene\source\demo2.txt 正在被索引.....

文件内容:Relay是我们登录IDC服务器的跳板机,在Relay上用户只能执行ssh、passwd等简单命令,Relay只做ssh跳板机儿不做日常工具机使用。

一共花费了235毫秒将D:\tools\LearningByMyself\lucene\source中的文件增加到索引里面去.....

关键字:服务器,在  D:/tools/LearningByMyself/lucene/index中,一共检索到2个...

分享到:
评论

相关推荐

    Html文件关键字搜索

    在本地进行HTML文件关键字搜索时,我们需要理解文件的结构,解析HTML代码,然后在其中查找匹配的文本。 1. **搜索原理**: - **文本提取**:首先,搜索程序需要读取HTML文件,并忽略所有的HTML标签,只保留文本...

    android+lucene实现全文检索并高亮关键字索引库

    下面我们将深入探讨如何在Android环境中利用Lucene来创建一个高效、功能丰富的全文检索系统,并了解如何高亮显示搜索结果中的关键字。 首先,我们要理解全文检索的基本原理。全文检索是指通过建立倒排索引来快速...

    安卓搜索相关相关-androidlucene实现全文检索并高亮关键字.rar

    这个压缩包"安卓搜索相关相关-androidlucene实现全文检索并高亮关键字.rar"显然包含了一种利用Apache Lucene库在Android平台上实现这一功能的方法。Apache Lucene是一个强大的开源全文搜索引擎库,它提供了高效的...

    Lucene3.0增删改查和关键字高亮实例

    在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...

    基于JAVA的文本搜索引擎的设计与实现

    - **索引构建**:利用Lucene构建全文索引,以便后续的搜索操作。 - **搜索模块**:实现基于关键字的搜索功能,并通过Lucene的API实现高效的查询。 - **相似度计算**:采用余弦相似度算法计算两篇文档之间的相似度...

    lucene 全文检索数据库

    这涉及到对`Photo`对象的遍历,提取其文本内容(如标题、描述等),并使用`IndexWriter`类将这些内容写入Lucene索引中。 #### Lucene搜索实现 完成索引创建后,即可使用Lucene的搜索功能。这通常包括构建查询解析...

    基于Lucene的桌面搜索引擎.doc

    【描述】:该文档主要探讨了如何利用Apache Lucene构建一个桌面搜索引擎,这是一个开源的全文检索库,为开发者提供了强大的文本搜索功能。 【标签】:“Lucene 搜索引擎” 【部分内容】:在深入理解基于Lucene的...

    知识库开发文档流程知识库用户文件操作及检索设计文档

    - **全文关键字检索**:利用Lucene搜索引擎,用户可以输入关键词进行全文搜索。 - **热点排名**:系统记录文件的查看次数,展示最热门的文件,可自定义显示数量。 3. **技术实现**: - **Lucene**:作为全文搜索...

    c# 关键字密度排行工具 源码

    本文将围绕一个名为"C#关键字密度排行工具"的源码进行解析,探讨其如何利用Lucene.NET库进行中文分词,以及相关技术的应用。 首先,"C#关键字密度排行工具"是一个基于C#编程语言开发的软件,它能够分析文本内容,...

    c#检索excel word ppt pdf

    然后,可以遍历所有单元格,对每个单元格的内容进行全文检索。但请注意,这种方法依赖于本地安装的Microsoft Office,且效率较低,不适合大量文件或大型数据的操作。 二、Word全文检索 同样,使用`Microsoft.Office...

    jsp+servlet+jdbc+lucene 搜索引擎

    4. **数字及日期索引**:对于非文本数据,如数字和日期,Lucene也能进行有效索引,支持对这些类型的数据进行高效检索。 5. **文件目录结构**:项目的文件目录结构清晰,有利于开发者理解和学习。通常包括源代码文件...

    深入了解Lucene之四 主要算法介绍.ppt

    快速排序是一种高效的排序算法,其核心思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。在Lucene...

    excel全文检索工具

    标题中的“excel全文检索工具”指的是一个专门针对Excel文件进行全文搜索的软件或应用程序。在IT领域,全文检索是搜索引擎技术的重要组成部分,它允许用户在大量文本数据中快速找到包含特定词汇或短语的记录。这里...

    lucene配置必备文件JAVA-CC

    Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发并维护,广泛应用于各种信息检索和数据分析场景。在Java环境中使用Lucene时,我们常常需要处理与解析文本相关的任务,这时`JavaCC`(Java Compiler ...

    lucene全文搜索ajax例子

    总的来说,这个例子是一个综合性的Web应用,它展示了如何利用Lucene进行全文搜索,结合Ajax技术实现动态更新的搜索结果展示,同时还包括了高亮显示和多次搜索的功能。这对于学习和理解Lucene在实际应用中的工作原理...

    ssm+lucene+redis

    3. 实现搜索功能:利用Lucene创建索引,这通常在后台服务启动时完成,或者在数据新增、更新时动态更新索引。在用户发起搜索请求时,使用Lucene的查询API匹配索引,返回匹配结果。 4. 数据库交互:MyBatis用于处理...

    基于Lucene的搜索策略研究

    这是因为Lucene需要对文件进行解析,提取关键字等操作,文件越大,这些操作所需的时间就越长。为了缩短索引建立的时间,可以采用以下策略: - 使用更高版本的JDK以及配置更好的硬件设备,如增加内存等,虽能起到...

    lucene2.4+nutch学习笔记三:lucene 在多个文本文档里找出包含一些关键字的文档

    这篇学习笔记主要探讨如何利用Lucene 2.4版本与Nutch进行集成,以便在多个文本文档中查找包含特定关键词的文档。 一、Lucene基础知识 Lucene的核心功能包括文档的索引和搜索。它将文本数据转换为倒排索引,使得对...

    基于LUCENE的搜索引擎的设计与实现源代码

    《基于LUCENE的搜索引擎设计与实现》 搜索引擎是互联网信息时代的重要工具,它使得海量数据的检索变得...通过学习和实践,我们可以利用LUCENE的强大功能,构建出高效、智能的搜索引擎,满足各种场景下的信息检索需求。

Global site tag (gtag.js) - Google Analytics