本代码涉及到的关键类有:
IndexWriter
Directory
Analyzer
Document
Field
IndexSearcher
Term
Query
TermQuery
TopDocs
代码示例:
package com.yale.lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
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;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
/**
* 创建一个索引
*
*
*
*/
public class Indexer
{
public static void main(String[] args) throws Exception
{
// 创建索引放在这个目录
String indexDir = "F://新建文件夹//luceneTest//indexFile";
// 要索引的文件存在的目录
String dataDir = "F://新建文件夹//luceneTest//dataSource";
long start = System.currentTimeMillis();
Indexer indexer = new Indexer(indexDir);
int numIndexed;
try
{
numIndexed = indexer.index(dataDir, new TextFilesFilter());
}
finally
{
indexer.close();
}
long end =System.currentTimeMillis();
System.out.println("Indexing " + numIndexed + " files took "
+ (end - start) + " milliseconds");
}
private IndexWriter writer;
public Indexer(String indexDir) throws Exception
{
Directory dir = FSDirectory.open(new File(indexDir));
// 创建IndexWriter
writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30),
true, IndexWriter.MaxFieldLength.LIMITED);
}
// 关闭IndexWriter
public void close() throws Exception
{
writer.close();
}
// 开始索引
public int index(String dir, FileFilter filter) throws Exception
{
File[] files = new File(dir).listFiles();
for (File f : files)
{
if (!f.isDirectory() && !f.isHidden() && f.exists() && f.canRead()
&& (filter == null || filter.accept(f)))
{
indexFile(f);
}
}
return writer.numDocs();
}
// 索引文件
private void indexFile(File f) throws Exception
{
System.out.println("Indexing " + f.getCanonicalPath());
Document doc = getDocument(f);
writer.addDocument(doc);
}
// 文档设置
private Document getDocument(File f) throws Exception
{
Document doc = new Document();
doc.add(new Field("contents", File2Reader(f), Field.Store.YES,
Field.Index.ANALYZED));
doc.add(new Field("filename", f.getName(), Field.Store.YES,
Field.Index.NOT_ANALYZED));
doc.add(new Field("fullpath", f.getCanonicalPath(), Field.Store.YES,
Field.Index.NOT_ANALYZED));
return doc;
}
public static String File2Reader(File f) throws Exception
{
BufferedReader bf = new BufferedReader(new InputStreamReader(
new FileInputStream(f)));
StringBuffer sb = new StringBuffer();
for (String line = null; (line = bf.readLine()) != null;)
{
sb.append(line).append("\n");
}
return sb.toString();
}
// 文件类型过滤
private static class TextFilesFilter implements FileFilter
{
@Override
public boolean accept(File pathname)
{
return pathname.getName().toLowerCase().endsWith(".txt");
}
}
}
package com.yale.lucene;
import java.io.File;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
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.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class Searcher
{
public static void main(String[] args) throws Exception
{
// 索引放在这个目录
String indexDir = "F://新建文件夹//luceneTest//indexFile";
// 要查询的字符串
String queryString = "Apache";
search(indexDir, queryString);
}
//开始搜索
public static void search(String indexDir, String queryString)
throws Exception
{
Directory dir = FSDirectory.open(new File(indexDir));
IndexSearcher is = new IndexSearcher(dir);
QueryParser parser = new QueryParser(Version.LUCENE_30, "contents",
new StandardAnalyzer(Version.LUCENE_30));
Query query = parser.parse(queryString);
long start = System.currentTimeMillis();
TopDocs hits = is.search(query, 10);
long end = System.currentTimeMillis();
System.err.println("找到 " + hits.totalHits + "个文件 在" + (end - start)
+ "毫秒匹配 要查询的字符串 '" + queryString + "'");
for(ScoreDoc scoreDoc :hits.scoreDocs)
{
Document doc = is.doc(scoreDoc.doc);
System.out.println(doc.get("fullpath"));
System.out.println(doc.get("filename"));
System.out.println(doc.get("contents"));
}
is.close();
}
}
分享到:
相关推荐
最受欢迎的java开源全文搜索引擎开发工具包。 提供了完整的查询引擎和... Lucene的目的是为软件开发人员提供一个简单易用的工具包, 以方便在目标系统中实现全文检索功能, 或者是以此为基础建立起完整的全文检索引擎。
`lucene入门小实例.txt` 文件中可能包含了一个简单的Lucene使用示例,例如: 1. 创建 `Directory` 对象,比如使用 `FSDirectory.open()` 打开一个文件系统的目录来存储索引。 2. 实例化 `Analyzer`,如使用 `...
这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...
1. **开放源代码**:Lucene 的源代码可供学习和定制,允许开发者根据实际需求创建更适合的应用。 2. **灵活的架构**:Lucene 的面向对象架构易于扩展,可以轻松处理各种文本格式,如HTML和PDF。 3. **社区支持**:...
以上是Lucene入门的基本知识和关键概念,通过深入学习和实践,你可以掌握如何利用Lucene构建强大的全文搜索引擎。记住,实践中遇到的问题往往是最好的学习资源,不断尝试和解决,你将逐渐成为Lucene的专家。
**Lucene 3.6 入门案例** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括索引、查询、评分等,广泛应用于各种项目和产品中。在这个入门案例中,我们将深入理解如何...
本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行搜索。 首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,...
### Lucene 入门与使用详解 #### 一、Lucene 简介及历史背景 1. **Lucene 的定义**: - **Lucene** 是一款纯 Java 编写的全文检索工具包,由资深全文索引/检索专家 Doug Cutting 创建。 - 它最初在 Doug Cutting...
**全文搜索引擎Lucene入门** 全文搜索引擎Lucene是Apache软件基金会的一个开放源代码项目,它为Java开发者提供了一个高性能、可扩展的信息检索库。Lucene以其强大的文本搜索功能和高效的索引能力,在各种需要全文...
在这个经典Lucene入门模块中,我们将深入理解如何使用Lucene进行索引创建和搜索操作。 首先,我们来看Lucene如何建立数据的索引。这通常涉及以下几个步骤: 1. **索引创建**:使用 `IndexWriter` 对象来创建或更新...
### Lucene 入门基础教程知识点详解 #### 一、Lucene简介 - **定义**:Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成,属于Apache项目的一部分。 - **适用场景**:适合于任何需要进行全文检索的应用...
1.建立索引 2.通过IKAnalyzer搜索中文关键词 3.复杂的多字段搜索 4.多线程并发搜索,通过contiperf测试,详见:contiperf_百度百科 5.分页搜索 注意:lucene4.10.0需要jdk1.7以上版本,1.6版本以下明确不再支持...
总结起来,Lucene入门涉及理解其索引和查询机制,掌握如何在Java项目中创建、管理和使用索引,以及如何执行有效的查询。CargoSearchServiceImpl.java和ManageCargoIndexServiceImpl.java代表了具体实现这些功能的...
lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子程序.txt 关于lucene2.0的创建、检索和删除功能的完整实现.doc web...
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. **查询...
1. **Lucene 3.0 的基础概念** - **索引**:Lucene 的核心是索引,它是一种预处理步骤,将文档内容转换为便于快速搜索的数据结构。 - **分词**:Lucene 使用分词器(Tokenizer)将文档拆分为单独的词汇项(Tokens...