基本概念:
前期准备:
lucene-2.4.0
junit4.9
实例代码:
package com.ln.ydc.lucene.test; import java.io.File; 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.index.IndexWriter; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Filter; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.junit.Test; import com.ln.ydc.lucene.util.LuceneUtil; /** * 1.根据 数据源文件 创建索引库 * 2.根据 数据源文件所在的目录 创建索引库 * 3.根据索引搜索关键字 * * @author ydc * */ public class HelloWorld { // 数据源文件路径 String filePath = "D:\\logs\\lucene\\datasource\\eng_article.txt"; // 索引库目录 String indexPath = "D:\\logs\\lucene\\luceneIndex"; // Directory directory = Directory.createOutput(indexPath); // 数据源目录 String dirPath = "D:\\logs\\lucene\\datasource"; // 词库分词器 Analyzer analyzer = new StandardAnalyzer(); // Analyzer analyzer = new MMAnalyzer(); // 中文分词器 /** * 根据数据源文件创建索引库 * * IndexWriter 是用来操作索引库的(增、删、改) */ @Test public void createIndexByFile() throws Exception { Document doc = LuceneUtil.file2Document(filePath); // file-->doc IndexWriter indexWriter = new IndexWriter(indexPath, analyzer, true, IndexWriter.MaxFieldLength.LIMITED); indexWriter.addDocument(doc); // optimize()方法是对索引进行优化 indexWriter.optimize(); indexWriter.close(); } /** * 根据数据源文件目录创建索引库 * * @throws Exception */ @Test public void createIndexByDir() throws Exception { File filesDir = new File(dirPath); IndexWriter indexWriter = new IndexWriter(indexPath, analyzer, true, IndexWriter.MaxFieldLength.LIMITED); for (String filePath : filesDir.list()) { Document doc = LuceneUtil.file2Document(dirPath + "//" + filePath); indexWriter.addDocument(doc); } // optimize()方法是对索引进行优化 indexWriter.optimize(); indexWriter.close(); } /** * 搜索 * * @throws ParseException * @throws IOException */ @Test public void search() throws ParseException, IOException { String queryString = "村上春树"; // 1.把要搜索的文本解析为Query String[] fields = { "name", "content" }; QueryParser queryParser = new MultiFieldQueryParser(fields, analyzer); Query query = queryParser.parse(queryString); // 2.进行查询 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); // 根据编号取出相应的文档 LuceneUtil.printDocumentInfo(doc); // 打印出文档信息 } } }
package com.ln.ydc.lucene.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.NumberTools; public class LuceneUtil { /** * 将一个具体的文件转换成document * 保存文件的如下信息: * name 文件名 * content 文件内容 * size 文件大小 * path 文件路径 * * @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().trim(), Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", readFileContent(file), Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("size", NumberTools.longToString(file.length()), Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NO)); return doc; } /** * 读取文件内容 * * @param file * @return */ public static String readFileContent(File file) { try { BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); StringBuffer content = new StringBuffer(); for (String line = null; (line = reader.readLine()) != null;) { if(line!=null && !"".equals(line=line.trim())) content.append(line).append("\n"); } return content.toString(); } catch (Exception e) { throw new RuntimeException(e); } } /** * <pre> * 获取 name 属性的值的两种方法: * 1.Field field = doc.getField("name"); * field.stringValue(); * 该方法已过时 * 2.doc.get("name"); * </pre> * * @param doc */ public static void printDocumentInfo(Document doc) { System.out.println("--------------------------------------------"); System.out.println("【name】 \t " + doc.get("name")); System.out.println("【content】 \t " + doc.get("content")); System.out.println("【size】 \t " + doc.get("size")); System.out.println("【path】 \t " + doc.get("path")); } /* public static void printDocumentInfo(QueryResult<Document> qr) { System.out.println("总共有【" + qr.getRecordCount() + "】条匹配结果"); for(Document doc : qr.getRecordList()) { printDocumentInfo(doc); } } */ }
相关推荐
**Lucene 3.0 全文检索入门实例** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了一个高级、灵活的搜索功能框架,允许开发者在自己的应用中轻松地集成全文检索功能。本文将重点介绍如何使用 ...
《最新全文检索 Lucene-5.2.1 入门经典实例》 Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统。在5.2.1版本中,Lucene提供了更为高效和强大的搜索功能,为开发者提供了构建...
Eclipse工程文件,全文检索 lucene-5.2.1 入门Eclipse工程实例,福利放送,与lucene3结果比对
这个压缩包中的内容可能是关于如何使用Lucene进行全文检索的一个基础教程和示例代码。 **一、Lucene的基本概念** 1. **文档(Document)**:在Lucene中,每个要被搜索的信息被看作一个文档,可以包含多个字段...
《Lucene 4.8 全文检索引擎入门详解》 Lucene 是一款开源的全文检索库,由 Apache 软件基金会维护。在版本 4.8 中,Lucene 提供了强大的文本分析、索引构建和搜索功能,使得开发者能够轻松地在应用程序中集成高效的...
《Lucene 3.6 入门实例教程》是一份专...总之,《Lucene 3.6 入门实例教程》是学习Lucene的理想资源,它将理论知识与实践操作紧密结合,使开发者能够快速掌握全文检索技术,为构建高效、精准的搜索应用打下坚实的基础。
Lucene 是一个由Apache软件基金会开发的开源全文检索引擎工具包,它并非一个完整的搜索引擎,而是提供了一个强大的架构,允许开发人员轻松地在他们的应用程序中集成全文检索功能。Lucene 支持多种语言,包括英文和...
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...
**Lucene 3.0 入门实例及关键知识点** ...总之,Lucene 3.0 入门实例提供了理解全文搜索引擎工作原理的基础,通过实践,开发者能够熟练掌握如何在自己的应用程序中集成和利用 Lucene 实现高效、精准的文本搜索功能。
这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...
10. **应用实例**: Lucene.Net常用于网站的搜索功能、大数据分析、日志分析、电子邮件搜索以及任何需要快速全文检索的场合。 通过学习这个“lucene.net+完全入门教程”,开发者可以了解如何在.NET环境中设置Lucene...
3. 书籍:《Lucene in Action》是一本经典的Lucene入门书籍,深入浅出地讲解了Lucene的各个方面。 通过这个PPT教程,你将全面了解Lucene的原理、使用方法以及如何在实际项目中集成和优化搜索引擎。每个章节都会结合...
"最新全文检索系统开源lucene资料大全"这个资料包很可能包含了Lucene的使用教程、API参考、实战案例等内容,帮助初学者快速入门并掌握Lucene的核心概念和技术。通过阅读PDF文档,你可以了解如何安装、配置、索引文档...
Lucene 是一个开源的全文检索库,由 Apache 软件基金会维护。它为开发者提供了一种高级的文本搜索功能,允许他们在应用程序中集成强大的搜索引擎。本篇文章将围绕 Lucene 3.0 版本,详细介绍其入门知识,并通过提供...
Lucene 提供了强大的文本分析、索引和查询功能,使开发者能够快速实现复杂的全文检索功能。 **Lucene 核心组件** Lucene 的核心组件包括以下几个部分: 1. **索引(Indexing)**:Lucene 首先将非结构化的文本...
【标题】:“第一个Lucene 3.6 (3.X) 入门实例” 【内容详解】 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它为Java开发者提供了强大的文本检索功能,广泛应用于搜索引擎、信息检索系统等场景。...
**Lucene 入门实例详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会维护。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够快速地在大量文本数据中实现全文检索功能。这个入门实例将帮助我们...
**全文搜索引擎Lucene入门** 全文搜索引擎Lucene是Apache软件基金会的一个开放源代码项目,它为Java开发者提供了一个高性能、可扩展的信息检索库。Lucene以其强大的文本搜索功能和高效的索引能力,在各种需要全文...