在具体实现之前,请根据自己的要求,建立对应的路径及文件。例如,我这边创建的路径及文件是: 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代码,然后在其中查找匹配的文本。 1. **搜索原理**: - **文本提取**:首先,搜索程序需要读取HTML文件,并忽略所有的HTML标签,只保留文本...
下面我们将深入探讨如何在Android环境中利用Lucene来创建一个高效、功能丰富的全文检索系统,并了解如何高亮显示搜索结果中的关键字。 首先,我们要理解全文检索的基本原理。全文检索是指通过建立倒排索引来快速...
这个压缩包"安卓搜索相关相关-androidlucene实现全文检索并高亮关键字.rar"显然包含了一种利用Apache Lucene库在Android平台上实现这一功能的方法。Apache Lucene是一个强大的开源全文搜索引擎库,它提供了高效的...
在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...
- **索引构建**:利用Lucene构建全文索引,以便后续的搜索操作。 - **搜索模块**:实现基于关键字的搜索功能,并通过Lucene的API实现高效的查询。 - **相似度计算**:采用余弦相似度算法计算两篇文档之间的相似度...
这涉及到对`Photo`对象的遍历,提取其文本内容(如标题、描述等),并使用`IndexWriter`类将这些内容写入Lucene索引中。 #### Lucene搜索实现 完成索引创建后,即可使用Lucene的搜索功能。这通常包括构建查询解析...
【描述】:该文档主要探讨了如何利用Apache Lucene构建一个桌面搜索引擎,这是一个开源的全文检索库,为开发者提供了强大的文本搜索功能。 【标签】:“Lucene 搜索引擎” 【部分内容】:在深入理解基于Lucene的...
- **全文关键字检索**:利用Lucene搜索引擎,用户可以输入关键词进行全文搜索。 - **热点排名**:系统记录文件的查看次数,展示最热门的文件,可自定义显示数量。 3. **技术实现**: - **Lucene**:作为全文搜索...
本文将围绕一个名为"C#关键字密度排行工具"的源码进行解析,探讨其如何利用Lucene.NET库进行中文分词,以及相关技术的应用。 首先,"C#关键字密度排行工具"是一个基于C#编程语言开发的软件,它能够分析文本内容,...
然后,可以遍历所有单元格,对每个单元格的内容进行全文检索。但请注意,这种方法依赖于本地安装的Microsoft Office,且效率较低,不适合大量文件或大型数据的操作。 二、Word全文检索 同样,使用`Microsoft.Office...
4. **数字及日期索引**:对于非文本数据,如数字和日期,Lucene也能进行有效索引,支持对这些类型的数据进行高效检索。 5. **文件目录结构**:项目的文件目录结构清晰,有利于开发者理解和学习。通常包括源代码文件...
快速排序是一种高效的排序算法,其核心思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。在Lucene...
标题中的“excel全文检索工具”指的是一个专门针对Excel文件进行全文搜索的软件或应用程序。在IT领域,全文检索是搜索引擎技术的重要组成部分,它允许用户在大量文本数据中快速找到包含特定词汇或短语的记录。这里...
Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发并维护,广泛应用于各种信息检索和数据分析场景。在Java环境中使用Lucene时,我们常常需要处理与解析文本相关的任务,这时`JavaCC`(Java Compiler ...
总的来说,这个例子是一个综合性的Web应用,它展示了如何利用Lucene进行全文搜索,结合Ajax技术实现动态更新的搜索结果展示,同时还包括了高亮显示和多次搜索的功能。这对于学习和理解Lucene在实际应用中的工作原理...
3. 实现搜索功能:利用Lucene创建索引,这通常在后台服务启动时完成,或者在数据新增、更新时动态更新索引。在用户发起搜索请求时,使用Lucene的查询API匹配索引,返回匹配结果。 4. 数据库交互:MyBatis用于处理...
这是因为Lucene需要对文件进行解析,提取关键字等操作,文件越大,这些操作所需的时间就越长。为了缩短索引建立的时间,可以采用以下策略: - 使用更高版本的JDK以及配置更好的硬件设备,如增加内存等,虽能起到...
这篇学习笔记主要探讨如何利用Lucene 2.4版本与Nutch进行集成,以便在多个文本文档中查找包含特定关键词的文档。 一、Lucene基础知识 Lucene的核心功能包括文档的索引和搜索。它将文本数据转换为倒排索引,使得对...
《基于LUCENE的搜索引擎设计与实现》 搜索引擎是互联网信息时代的重要工具,它使得海量数据的检索变得...通过学习和实践,我们可以利用LUCENE的强大功能,构建出高效、智能的搜索引擎,满足各种场景下的信息检索需求。