size=large][/size]
apache lucene 一个最简单的实例
就像每个程序都有一个Hello World来让人体验它一样,lucene也可以很简单的提供一个实例。如下(来自lucene in action的例子)有两个类组成:
一个是建立索引
package my;
[/size][size=small]
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
public class Indexer {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
throw new Exception("Usage: java " + Indexer.class.getName()
+ " <index dir> <data dir>");
}
File indexDir = new File(args[0]);
File dataDir = new File(args[1]);
long start = new Date().getTime();
int numIndexed = index(indexDir, dataDir);
long end = new Date().getTime();
System.out.println("Indexing " + numIndexed + " files took "
+ (end - start) + " milliseconds");
}
// open an index and start file directory traversal
public static int index(File indexDir, File dataDir) throws IOException {
if (!dataDir.exists() || !dataDir.isDirectory()) {
throw new IOException(dataDir
+ " does not exist or is not a directory");
}
IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(),
true);
writer.setUseCompoundFile(false);
indexDirectory(writer, dataDir);
int numIndexed = writer.docCount();
writer.optimize();
writer.close();
return numIndexed;
}
// recursive method that calls itself when it finds a directory
private static void indexDirectory(IndexWriter writer, File dir)
throws IOException {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File f = files;
if (f.isDirectory()) {
indexDirectory(writer, f);
} else if (f.getName().endsWith(".txt")) {
indexFile(writer, f);
}
}
}
// method to actually index file using Lucene
private static void indexFile(IndexWriter writer, File f)
throws IOException {
if (f.isHidden() || !f.exists() || !f.canRead()) {
return;
}
System.out.println("Indexing " + f.getCanonicalPath());
Document doc = new Document();
doc.add(Field.Text("contents", new FileReader(f)));
doc.add(Field.Keyword("filename", f.getCanonicalPath()));
writer.addDocument(doc);
}
}另一个是搜索:
package my;
import java.io.File;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
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.store.Directory;
import org.apache.lucene.store.FSDirectory;
public class Searcher {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
throw new Exception("Usage: java " + Searcher.class.getName()
+ " <index dir> <auery>");
}
File indexDir = new File(args[0]);
String q = args[1];
if (!indexDir.exists() || !indexDir.isDirectory()) {
throw new Exception(indexDir
+ " does not exist or is not a directory.");
}
search(indexDir, q);
}
public static void search(File indexDir, String q) throws Exception {
Directory fsDir = FSDirectory.getDirectory(indexDir, false);
IndexSearcher is = new IndexSearcher(fsDir);
Query query = QueryParser.parse(q, "contents", new StandardAnalyzer());
long start = new Date().getTime();
Hits hits = is.search(query);
long end = new Date().getTime();
System.err.println("Found " + hits.length() + " document(s) (in "
+ (end - start) + " milliseconds) that matched query ‘" + q
+ "’:");
for (int i = 0; i < hits.length(); i++) {
Document doc = hits.doc(i);
System.out.println(doc.get("filename"));
}
}
}ok,这样就简单实现了,在搜索目录下所有txt,找出包括某一个字符串的txt文件名的功能。
分享到:
相关推荐
- **Lucene定义**:Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成,是Apache基金会下的一个开源项目。 - **发展历程**:自1999年由Doug Cutting创建以来,Lucene已经发展成为全球最广泛使用的全文...
标题 "第一个lucene的简单实例" 提到的是关于Apache Lucene的初步应用,这是一个全文搜索引擎库,常用于Java开发中。Lucene提供了高效的文本搜索功能,使得开发者能够快速地在大量数据中查找相关信息。 描述中的 ...
《Lucene+HighLighter高亮显示实例解析》 在信息技术领域,搜索引擎的构建与优化是至关重要的一环,其中,如何有效地对搜索结果进行高亮...无论是简单的个人项目还是大型企业级应用,Lucene都是一个值得信赖的选择。
1. 复合段(Compound Segment):为了提高检索效率,Lucene会合并多个小段成一个大段。 2. 倒排索引(Inverted Index):Lucene的核心数据结构,它将词典映射到包含该词的文档集合。 3. 评分系统(Scoring):...
Apache Lucene是一个开源的全文检索库,它提供了强大的文本搜索功能,能够帮助企业构建自己的搜索引擎。下面我们将深入探讨如何使用Lucene来实现企业级的搜索实例。 首先,我们需要理解Lucene的基本架构。Lucene的...
Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了高级的索引和搜索功能,广泛应用于各种信息检索系统。在这个“lucene5的一个简单Demo”中,我们将深入探讨如何使用 Lucene 5.x 版本...
Lucene是一个由Apache软件基金会开发的全文检索库,它提供了一个高级的、可扩展的、基于Java的搜索程序库。Lucene的核心功能包括文档的索引、存储、搜索以及相关的处理,如分词、过滤等。它的优点在于灵活性高,可以...
Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索库。这个库提供了索引和搜索文本的高级功能,使得开发者能够轻松地在应用程序中实现强大的搜索功能。Lucene最初由Doug Cutting开发,现在已经...
Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发,它为 Java 开发人员提供了强大的文本搜索功能。在 Lucene 3.0 版本中,虽然已经相对较旧,但仍然包含了基本的搜索引擎功能,适用于简单或特定场景的搜索...
Lucene是Apache软件基金会下的一个开源全文搜索引擎库,它提供了高性能、可扩展的文本搜索功能。Lucene并不是一个完整的搜索引擎,而是一个工具集,允许开发人员在自己的应用程序中实现搜索功能。这个压缩包中的内容...
Lucene 被认为是当前最先进、性能最佳且功能最全面的搜索引擎库之一。 #### 二、主要特点与优势 - **Java 编写**:ES 使用 Java 语言编写,便于跨平台部署和维护。 - **RESTful API**:提供了简单易用的 RESTful ...
接下来,我们来看看如何创建一个简单的LuceneDemo: 1. **引入依赖**:首先,你需要在项目中引入Lucene的依赖库。对于Java项目,可以通过Maven或Gradle添加相应的依赖项。 2. **创建索引**:创建一个`Directory`...
这个“lucene小实例文件检索”旨在为初学者提供一个简单但完整的文件检索功能实现,帮助理解Lucene的基本工作原理和使用方法。 在Lucene中,文件检索主要涉及以下几个核心概念: 1. **索引(Index)**:在Lucene中...
Lucene提供了一个简单确强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费java资讯检索程式库。人们经常...
Lucene是一个强大的全文搜索引擎库,由Apache软件基金会开发并维护,它在Java编程语言中实现,广泛应用于各种搜索应用的构建。这个“简单的lucene demo”旨在向我们展示如何利用Lucene进行基础的文本索引和搜索操作...
Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它为Java开发者提供了强大的文本检索功能,广泛应用于搜索引擎、信息检索系统等场景。在3.6版本中,Lucene引入了诸多改进和优化,提高了搜索效率和用户...
Lucene提供了一个简单的API,用于索引和搜索文本,支持布尔查询、短语查询、模糊查询等多种查询方式。在Web环境中,Lucene通常与Servlets或现代Web框架(如Spring MVC或Struts)结合使用,以实现动态网站的实时搜索...
Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了在Java环境中构建全文检索应用的基础框架。在最新的8.5.1版本中,Lucene进一步提升了性能和功能,使其在Windows平台上的表现更加出色。本文将深入探讨...
Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了高效的文本检索、分析和存储功能,被广泛应用于各种需要全文搜索的应用中。本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行...