一、创建索引
import java.io.File;
import java.io.FileReader;
import java.util.Date;
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.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class Indexer {
/**
* @param args
*/
public static void main(String[] args) throws Throwable{
//保存索引文件的地方
String indexDir = "F:\\testIndex";
//将要搜索TXT文件的地方
String dateDir = "F:\\testDoc";
IndexWriter indexWriter = null;
//创建Directory对象
Directory dir = new SimpleFSDirectory(new File(indexDir));
//创建IndexWriter对象,第一个参数是Directory,第二个是分词器,第三个表示是否是创建,如果为false为在此基础上面修改,第四表示表示分词的最大值,比如说new MaxFieldLength(2),就表示两个字一分,一般用IndexWriter.MaxFieldLength.LIMITED
indexWriter = new IndexWriter(dir,new StandardAnalyzer(Version.LUCENE_36),true,IndexWriter.MaxFieldLength.UNLIMITED);
File[] files = new File(dateDir).listFiles();
for (int i = 0; i < files.length; i++) {
Document doc = new Document();
//创建Field对象,并放入doc对象中
doc.add(new Field("contents", new FileReader(files[i])));
doc.add(new Field("filename", files[i].getName(),
Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("indexDate",DateTools.dateToString(new Date(), DateTools.Resolution.DAY),Field.Store.YES,Field.Index.NOT_ANALYZED));
//写入IndexWriter
indexWriter.addDocument(doc);
}
//查看IndexWriter里面有多少个索引
System.out.println("numDocs"+indexWriter.numDocs());
indexWriter.close();
}
}
二、查询索引
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.FieldSelector;
import org.apache.lucene.document.MapFieldSelector;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.FilteredQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class Searcher {
/**
* @param args
*/
public static void main(String[] args) throws Throwable{
//保存索引文件的地方
String indexDir = "F:\\testIndex";
Directory dir = new SimpleFSDirectory(new File(indexDir));
//创建 IndexSearcher对象,相比IndexWriter对象,这个参数就要提供一个索引的目录就行了
IndexSearcher indexSearch = new IndexSearcher(dir);
//创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器
QueryParser queryParser = new QueryParser(Version.LUCENE_36,
"contents", new StandardAnalyzer(Version.LUCENE_36));
//生成Query对象
Query query = queryParser.parse("contents:book ");
Query queryFilter = queryParser.parse("indexDate:20130304");
Filter filter = new QueryWrapperFilter(queryFilter);
//在结果中找
query = new FilteredQuery(query,filter);
filter = new QueryWrapperFilter(queryParser.parse("filename:na*"));
//搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值
TopDocs hits = indexSearch.search(query,filter, 10);
//hits.totalHits表示一共搜到多少个
System.out.println("找到了"+hits.totalHits+"个");
//循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值
for (int i = 0; i < hits.scoreDocs.length; i++) {
ScoreDoc sdoc = hits.scoreDocs[i];
Document doc = indexSearch.doc(sdoc.doc);
// List<String> list = new ArrayList<String>();
// list.add("indexDate");
// //添加选择器,可选择加载哪些Field
// FieldSelector selector = new MapFieldSelector(list);
// doc = indexSearch.doc(sdoc.doc, selector);
System.out.println(doc.get("filename"));
// System.out.println(doc.get("contents"));
// System.out.println(doc.get("indexDate"));
// for(Fieldable str :doc.getFields()){
//
System.out.println(str);
// }
//
// System.out.println(sdoc);
}
indexSearch.close();
}
}
分享到:
相关推荐
这个压缩包中的源码很可能是演示了如何构建和使用Lucene索引进行搜索的简单实例,对于初学者来说是一份很好的学习资料。通过阅读源码,你可以了解如何实际操作Lucene,从而加深对Lucene的理解。同时,实践是最好的...
在“lucene入门小例子”中,可能包含创建索引、添加文档、查询和显示结果等基本操作的示例代码。这些代码将帮助你了解如何在实际项目中集成和使用Lucene,进一步熟悉全文检索的原理和实践。 在学习过程中,你可能会...
本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行搜索。 首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,...
使用 IndexSearcher 和 QueryParser 创建查询,QueryParser 可以将用户的输入转换为 Lucene 查询表达式。执行搜索后,会得到一个 TopDocs 对象,其中包含了匹配的文档及其评分。 4. **展示结果** 从 TopDocs 中...
3. **查询(Querying)**: 使用 QueryParser 创建查询对象,然后用 IndexSearcher 执行查询: ```java Query query = new QueryParser("content", analyzer).parse("Lucene 3.0"); TopDocs hits = searcher....
通过学习这个“lucene.net+完全入门教程”,开发者可以了解如何在.NET环境中设置Lucene.Net项目,创建和管理索引,编写查询,优化搜索性能,并掌握如何处理搜索结果。教程可能涵盖从安装步骤、基本概念介绍,到实战...
Lucene 提供了强大的文本分析、索引和查询功能,使开发者能够快速实现复杂的全文检索功能。 **Lucene 核心组件** Lucene 的核心组件包括以下几个部分: 1. **索引(Indexing)**:Lucene 首先将非结构化的文本...
1. **索引(Indexing)**:Lucene 的工作始于创建索引,将文档内容转化为可搜索的形式。索引过程涉及分词(Tokenization)、词干提取(Stemming)和去除停用词(Stopword Removal)等步骤,以优化搜索性能。 2. **...
5. **查询索引**:使用`QueryParser`创建查询对象,然后通过`IndexSearcher`进行搜索,获取结果集。 6. **读取和删除索引**:`DirectoryReader`用于读取索引,`IndexWriter`支持删除索引条目。 以上就是Lucene的...
在提供的"lucene5.2.1入门经典案例"中,你可以找到如何创建索引、执行查询、高亮显示结果等具体操作的示例代码。这些案例可以帮助初学者快速理解和应用Lucene-5.2.1的核心功能。通过实践,你可以更深入地了解Lucene...
3. **查询与搜索**:讲解如何使用查询解析器将用户输入的字符串转换为Lucene查询对象,然后利用搜索器在索引中查找匹配的文档。此外,还会涉及评分系统(Scoring),它决定了搜索结果的相关性。 4. **结果集处理**...
**Lucene 3.0 全文检索入门实例** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了一个高级、灵活的搜索功能框架,允许开发者在自己的应用中轻松地集成全文检索功能。本文将重点介绍如何使用 ...
5. **使用示例**:"Lucene_self01" 文件可能包含了创建索引和查询的基本代码示例,例如: - 初始化 Analyzer 和 Directory(如 RAMDirectory 或 FSDirectory)。 - 创建 IndexWriter 并添加 Document。 - 关闭 ...
**Lucene 2.4 入门例子** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供了强大的搜索功能,被广泛应用于各种应用中的信息检索。在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和...
本工程旨在为初学者提供一个入门Lucene建立索引的实例,帮助理解并掌握这一技术。 **正文:** 1. **Lucene简介** - Lucene是一个高性能、全文本搜索库,适用于Java开发者,可以嵌入到各种应用程序中,创建强大的...
1. **索引创建**:使用 `IndexWriter` 对象来创建或更新Lucene索引。在示例代码中,`IndexWriter` 初始化时传入了索引路径、分析器(在这里是 `StandardAnalyzer`)以及一个布尔值,该值为`true`表示新建索引,`...
- `Lucene 原理与代码分析完整版.pdf` 和 `Lucene in Action.pdf` 可能深入到 Lucene 的内部机制,包括索引构建、查询解析和结果排名等,帮助你理解底层工作原理。 通过以上内容的学习,你可以掌握 Lucene 3.0 的...