Lucene自带示例精简,只留下了主要代码。以备查看
对文件夹生成索引
package zhch.illq.lucene;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import net.paoding.analysis.analyzer.PaodingAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class LuceneIndex {
static final File INDEX_DIR = new File("d:\\temp\\index");
// 主要代码 索引docDir文件夹下文档,索引文件在INDEX_DIR文件夹中
public static void main(String[] args) {
File docDir = new File("d:\\temp\\neirong");
try {
IndexWriter standardWriter = new IndexWriter(FSDirectory.open(INDEX_DIR), new StandardAnalyzer(
Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);
// 如果是索引中文内容,可以使用Paoding中文分词器
IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), new PaodingAnalyzer(), true,
IndexWriter.MaxFieldLength.LIMITED);
String[] files = docDir.list();
for (String fileStr : files) {
File file = new File(docDir, fileStr);
if (!file.isDirectory()) {
writer.addDocument(document(file));
}
}
writer.optimize();
writer.close();
} catch (IOException e) {
System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
}
}
public static Document document(File f) throws java.io.FileNotFoundException {
Document doc = new Document();
// 添加path,索引(可查询)但不切词
doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
// 添加最后修改日期
doc.add(new Field("modified", DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE),
Field.Store.YES, Field.Index.NOT_ANALYZED));
// 添加内容,指定一个Reader,文件内容解析但不存储,这里的Reader使用系统默认的编码读入
doc.add(new Field("contents", new FileReader(f)));
return doc;
}
}
对索引进行查询
package zhch.illq.lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import net.paoding.analysis.analyzer.PaodingAnalyzer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class LuceneSearch {
/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {
String index = "d:\\temp\\index";
String field = "contents";
String queries = null;
boolean raw = false;
// 要显示条数
int hitsPerPage = 10;
// searching, so read-only=true
IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)), true); // only
Searcher searcher = new IndexSearcher(reader);
Analyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
// 如果是索引中文内容,可以使用Paoding中文分词器
Analyzer analyzer = new PaodingAnalyzer();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
QueryParser parser = new QueryParser(field, analyzer);
while (true) {
if (queries == null) // prompt the user
System.out.println("Enter query: ");
String line = in.readLine();
if (line == null || line.length() == -1)
break;
line = line.trim();
if (line.length() == 0)
break;
Query query = parser.parse(line);
System.out.println("Searching for: " + query.toString(field));
doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null);
}
reader.close();
}
public static void doPagingSearch(BufferedReader in, Searcher searcher, Query query, int hitsPerPage, boolean raw,
boolean interactive) throws IOException {
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, false);
searcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
int end, numTotalHits = collector.getTotalHits();
System.out.println(numTotalHits + " total matching documents");
int start = 0;
end = Math.min(hits.length, start + hitsPerPage);
for (int i = start; i < end; i++) {
Document doc = searcher.doc(hits[i].doc);
String path = doc.get("path");
if (path != null) {
System.out.println((i + 1) + ". " + path);
System.out.println(" modified: " + doc.get("modified"));
} else {
System.out.println((i + 1) + ". " + "No path for this document");
}
}
}
}
分享到:
相关推荐
最受欢迎的java开源全文搜索引擎开发工具包。 提供了完整的查询引擎和... Lucene的目的是为软件开发人员提供一个简单易用的工具包, 以方便在目标系统中实现全文检索功能, 或者是以此为基础建立起完整的全文检索引擎。
**Lucene5学习之创建索引入门示例** 在IT领域,搜索引擎的开发与优化是一项关键技术,而Apache Lucene作为一款高性能、全文本搜索库,是许多开发者进行文本检索的首选工具。本文将深入探讨如何使用Lucene5来创建一...
本文将从一个简单的Lucene入门示例出发,帮助初学者理解其基本概念和操作流程。 首先,我们需要了解Lucene的主要组件: 1. **Analyzer**: 分析器是Lucene中的关键部分,它负责将输入的文本分解为可搜索的词项...
`lucene入门小实例.txt` 文件中可能包含了一个简单的Lucene使用示例,例如: 1. 创建 `Directory` 对象,比如使用 `FSDirectory.open()` 打开一个文件系统的目录来存储索引。 2. 实例化 `Analyzer`,如使用 `...
《Lucene 4.8 全文检索引擎入门详解》 Lucene 是一款开源的全文检索库,由 Apache 软件基金会维护。在版本 4.8 中,Lucene 提供了强大的文本分析、索引构建和搜索功能,使得开发者能够轻松地在应用程序中集成高效的...
本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行搜索。 首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,...
在这个"lucene3.0.0 入门DEMO"中,我们将探讨如何使用 Lucene 3.0.0 版本进行基本操作。 首先,让我们了解Lucene的核心概念: 1. **索引**:在Lucene中,索引是文档内容的预处理结果,类似于数据库中的索引,用于...
这份教程通过完整的代码示例,为学习者提供了实践操作的机会,从而深入理解Lucene的核心机制。 首先,了解Lucene的基本架构至关重要。Lucene的核心组件包括索引器(Indexer)、查询解析器(Query Parser)和搜索器...
doc.add(new Field("title", "Lucene入门", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是Lucene 3.0的实例", Field.Store.YES, Field.Index.ANALYZED)); ``` 3. **查询...
### Lucene的入门实例 #### 建立索引 1. **包导入**:首先,需要导入Lucene相关的包,包括`java.io`用于文件操作,`org.apache.lucene.analysis`用于文本分析,`org.apache.lucene.document`用于创建文档对象,...
- "sample.dw.paper.lucene1.0"可能是项目或示例代码的目录,包含了Lucene的实现代码和可能的测试数据。在这个目录下,你可能会找到源码文件(如.java)、配置文件(如.xml)以及测试数据。 通过这个入门程序,你...
这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...
5. **使用示例**:"Lucene_self01" 文件可能包含了创建索引和查询的基本代码示例,例如: - 初始化 Analyzer 和 Directory(如 RAMDirectory 或 FSDirectory)。 - 创建 IndexWriter 并添加 Document。 - 关闭 ...
**Lucene 2.4 入门例子** Lucene 是一个高性能、...虽然示例简单,但涵盖了Lucene的核心概念和常用操作。随着深入学习,你可以掌握更高级的特性,如分面搜索、近实时搜索、复杂查询构造等,以适应更复杂的搜索需求。
本篇文章将围绕 Lucene 3.0 版本,详细介绍其入门知识,并通过提供的文档列表,帮助你深入了解并实现简单的搜索功能。 1. **Lucene 3.0 的基础概念** - **索引**:Lucene 的核心是索引,它是一种预处理步骤,将...
以上是Lucene入门的基本知识和关键概念,通过深入学习和实践,你可以掌握如何利用Lucene构建强大的全文搜索引擎。记住,实践中遇到的问题往往是最好的学习资源,不断尝试和解决,你将逐渐成为Lucene的专家。