package cn.zhf.lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
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.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class TextFileIndexer {
public static void main(String[] args) throws IOException {
// 被索引的文件
File dirFile = new File("c:/users/zhf/desktop/toindex");
// 索引结果文件
File indexFile = new File("c:/users/zhf/desktop/indexed");
//索引文件的存放位置,由子类获取真实路径
Directory directory = FSDirectory.open(indexFile);
// 标准分析器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,
analyzer);
iwc.setOpenMode(OpenMode.CREATE);
//写索引:是索引过程的核心组件,这个类负责创建新索引或打开已有的索引。提供索引文件的写入操作
IndexWriter iw = new IndexWriter(directory, iwc);
File[] files = dirFile.listFiles();//要索引的文件列表
long startTime = new Date().getTime();
//将索引文件添加到结果目录中(indexFile)
for (int i = 0; i < files.length; i++) {
if (files[i].isFile() && files[i].getName().endsWith(".txt")) {
System.out.println(files[i].getCanonicalPath() + "正在被索引");
String temp = readFile(files[i].getCanonicalPath(), "GBK");
System.out.println(temp);
//域的集合
Document document = new Document();
//创建路径域
Field fieldPath = new Field("path", files[i].getPath(),
Field.Store.YES, Field.Index.NO);
//创建文本域
Field fieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(fieldPath);
document.add(fieldBody);
iw.addDocument(document);
}
}
iw.close();
long endTime = new Date().getTime();
System.out.println("索引时间是: " + (startTime - endTime)
+ dirFile.getPath());
}
// 读取文件内容,将文件内容拼成一个字符串返回
public static String readFile(String fileName, String charset)
throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(new File(fileName))));
String str = "";
String ret = "";
while ((str = br.readLine()) != null)
ret += str;
br.close();
return ret;
}
}
package cn.zhf.lucene;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
public class TestQuery {
public static void main(String[] args) throws CorruptIndexException, IOException, ParseException {
String indexed = "c:/users/zhf/desktop/indexed";
//用于搜索IndexWriter创建的索引
IndexReader ir = IndexReader.open(FSDirectory.open(new File(indexed)));
IndexSearcher is = new IndexSearcher(ir);
ScoreDoc[] hits = null;
// String keyword = "lucene";
// Query query = null;
// Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
// QueryParser qp = new QueryParser(Version.LUCENE_36,"body",analyzer);
// query = qp.parse(keyword);
//Term是搜索对象的基本单元,与Field类似
Query q = new TermQuery(new Term("body","lucene"));
if(is != null){
//一个指针容器,指向前N个排名的搜索结果
TopDocs top = is.search(q, 10);//返回最多10条记录
hits = top.scoreDocs;
if(hits.length>0)
System.out.println("找到了 "+hits.length+" 条记录。");
for(ScoreDoc d : hits){
Document d1 = is.doc(d.doc);
System.out.println(d1.get("path"));
Explanation explanation = is.explain(q, d.doc);
System.out.println("------------");
System.out.println(explanation.toString());
}
is.close();
}
}
}
分享到:
相关推荐
- Lucene的核心能力在于文档索引和查询,它提供了强大的API来实现高效的文档检索。 2. **XML简介** - XML(Extensible Markup Language,可扩展标记语言)是一种用来标记数据的语言,它定义了用于描述结构化文档...
通过上述步骤,我们可以构建一个基于Lucene的增量索引系统,高效地处理数据变化,同时保持搜索效率。在实际应用中,还需要结合具体的业务需求和数据特性进行定制化开发。通过持续监控和优化,我们可以确保系统的稳定...
以下是关于使用Lucene实现索引查询的详细知识: ### 一、创建索引 创建索引是Lucene的核心过程,它涉及到以下步骤: 1. **定义索引目录**:首先,你需要指定一个目录来存储索引文件。这通常是一个文件夹,可以...
本篇文章将详细阐述如何使用Lucene来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...
5. **搜索(Search)**:用户输入查询后,Lucene会使用查询解析器(Query Parser)将查询字符串转化为搜索表达式,然后在索引中进行匹配。搜索结果按相关性排序返回。 Swing是Java的一个图形用户界面(GUI)工具包...
**Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文搜索引擎库,它提供了文本检索的核心工具,使得开发者能够快速构建自己的搜索应用。本项目中的代码旨在展示如何利用Lucene对多个文件夹下的数据进行...
在深入探讨Lucene删除索引这一主题之前,我们先来理解一下Lucene的基本概念。Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。它提供了高性能、可扩展的搜索和索引功能,广泛应用于各种应用程序中,如...
在这个实例中,我们将深入探讨如何使用Lucene.NET 2.9.2来实现索引的生成、修改、查询和删除。 **一、索引生成** 首先,我们需要创建一个索引,这是全文检索的基础。在Lucene.NET中,我们通常会定义一个文档类,...
在创建索引时,Lucene会对文档进行分词,生成一系列的关键词(也称为术语或Token),然后构建倒排索引。倒排索引是一种数据结构,它将每个关键词与包含该关键词的文档位置相关联,使得我们可以迅速找到包含特定词汇...
3. 构建查询:使用QueryParser或者QueryBuilder创建查询对象,指定查询字段和查询字符串。 4. 执行搜索:调用IndexSearcher的search方法,传入查询对象和TopDocs参数,获取匹配的文档及其分数。 5. 处理结果:遍历...
总结起来,Lucene5学习之增量索引(Zoie)涉及到的关键技术点包括: 1. 基于Lucene的增量索引解决方案:Zoie系统。 2. 主从复制架构:Index Provider和Index User的角色。 3. 数据变更追踪:通过变更日志实现增量索引...
以上就是Lucene索引器实例的基本介绍,通过这个实例,我们可以理解到如何使用Lucene来创建、管理和搜索文本索引。在实际项目中,可以根据需求选择合适的存储(如硬盘目录或分布式存储)、优化分析器配置、处理大量...
它为开发者提供了构建搜索应用所需的所有基本工具,包括索引文档、执行查询、处理分析等。Lucene3.0是该系列的一个版本,在性能和稳定性方面都有所提升。 #### 二、创建索引的基本步骤 根据提供的描述,创建索引的...
**Lucene5学习之创建索引入门示例** 在IT领域,搜索引擎的开发与优化是一项关键技术,而Apache Lucene作为一款高性能、全文本搜索库,是许多开发者进行文本检索的首选工具。本文将深入探讨如何使用Lucene5来创建一...
通过这些代码,我们可以学习到Lucene的核心概念,包括索引构建、分词分析和查询执行,这对于理解全文检索系统的工作原理非常有帮助。在实际应用中,可以根据具体需求调整Analyzer和QueryParser的设置,以满足更复杂...
Lucene的核心包括索引构建、倒排索引、查询解析和结果排序等关键部分。3.0版本相比之前的版本,在性能和稳定性上有了显著提升,同时引入了新的特性和优化。 二、庖丁解牛:Lucene3.0内部机制 1. 文档索引:Lucene...
Lucene的强大之处在于其灵活的查询能力。除了基本的关键词查询,Lucene还支持布尔查询、短语查询、模糊查询等。在4.7.2版本中,Lucene引入了通用对象搜索,这意味着你可以根据自定义的对象类型进行搜索,这极大地...
2. CQRS(Command Query Responsibility Segregation):在处理索引构建和查询时,Lucene分别采用了不同的数据结构和算法,体现了CQRS的思想。 3. 工具支持:Lucene提供了丰富的工具和API,如Luke工具可以查看索引...
数据查询可能涉及到SQL语句的编写,确保查询结果符合构建索引的需求。接着,数据会被转化为Lucene.NET支持的文档对象,每个文档对象对应数据库中的一个记录。这些文档对象包含了待索引的字段,如标题、内容等,这些...
- **向量模型**:使用查询词和文档之间的向量表示,通过计算相似度来决定文档的相关度,支持精确匹配和部分匹配。 3. **查询流程**: - 用户输入查询请求。 - 对查询词进行词频统计和格式化。 - 使用索引进行...