package com.javaeye.tonybo2006.lucene.test;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.*;
import org.apache.lucene.index.*;
import org.apache.lucene.queryParser.*;
import org.apache.lucene.search.*;
/**
* @author tonybo2006
*
*/
public class TextFileSearcher {
private String indexFilePath = null;
public TextFileSearcher(String indexFilePath) {
this.indexFilePath = indexFilePath;
}
/**
* @return StandardAnalyzer
*/
private Analyzer getAnalyzer() {
return new StandardAnalyzer();
}
/**
* TermQuery可以用“field:key”方式,例如“content:lucene”。
* BooleanQuery中‘与’用‘+’,‘或’用‘-’,例如“content:java contenterl”。
* WildcardQuery仍然用‘?’和‘*’,例如“content:use*”。
* PhraseQuery用‘~’,例如“content:"中日"~5”。
* PrefixQuery用‘*’,例如“中*”。
* FuzzyQuery用‘~’,例如“content: wuzza ~”。
* RangeQuery用‘[]’或‘{}’,前者表示闭区间,后者表示开区间,例如“time:[20060101 TO 20060130]”,注意TO区分大小写。
* @param queryString
* @return
*/
public int queryByQueryParser(String queryString) {
int intRecords = 0;
IndexSearcher isearcher = null;
try {
isearcher = new IndexSearcher(indexFilePath);
TopDocCollector collector = new TopDocCollector(10); // 启用这个
QueryParser parser = new QueryParser("title",getAnalyzer());
Query query = parser.parse("+(contents:" + queryString + ")+modified:[200811140000 TO 200811149999]");
long startTime = new Date().getTime();
System.out.println("开始查询……");
isearcher.search(query, collector);
// 测试一下查询的时间
long endTime = new Date().getTime();
ScoreDoc[] scoreDoc = collector.topDocs().scoreDocs; // 拿到结果
intRecords = scoreDoc.length;
int docId = 0;
for (int i = 0; i < intRecords; i++) {
docId = scoreDoc[i].doc; // 一个内部编号
isearcher.doc(docId); // 通过编号,拿到文档
System.out.println("第" + (i + 1) + "条数据,包含在File:"
+ isearcher.doc(docId).get("path"));
System.out.println("第" + (i + 1) + "条数据,修改时间:"
+ isearcher.doc(docId).get("modified"));
}
System.out.println("查询到了" + intRecords + "条数据,花费了"
+ (endTime - startTime) + "毫秒!");
} catch (ParseException e) {
e.printStackTrace();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (isearcher != null) {
try {
isearcher.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return intRecords;
}
/**
* @param args
*/
public static void main(String[] args) {
String indexFilePath = "D:\\index";//索引文件路径
String queryString = "test";
TextFileSearcher textFileSearcher = new TextFileSearcher(indexFilePath);
textFileSearcher.queryByQueryParser(queryString);
}
}
分享到:
相关推荐
我们将以MS SQL Server 2000中的Authors表为例,展示如何建立索引、查询及在Web界面下展示结果。 1. 数据库表Authors结构解析 - Au_id:作者号,Varchar(11) - Au_name:作者名,Varchar(60) - Phone:电话号码...
在“lucene入门小例子”中,可能包含创建索引、添加文档、查询和显示结果等基本操作的示例代码。这些代码将帮助你了解如何在实际项目中集成和使用Lucene,进一步熟悉全文检索的原理和实践。 在学习过程中,你可能会...
在建立索引后,"lucene检索小例子"中的搜索部分使用Analyzer、Query和IndexSearcher等组件来执行查询。Analyzer用于对查询字符串进行相同的预处理,Query对象代表了用户的查询意图,而IndexSearcher则负责在索引中...
本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、Lucene3.0简介 Lucene是一款高性能、全功能的全文搜索引擎库。它为开发者提供了构建搜索应用所需的所有基本工具...
这需要掌握如何将文件内容导入Lucene索引,以及如何快速定位和检索文件。 总的来说,通过这个压缩包中的例子,开发者可以从实践中学习Lucene的核心功能和使用技巧,包括索引构建、查询解析、结果处理、中文分词以及...
2. 基于内存的缓存:为了提高搜索效率,Lucene允许在内存中缓存部分索引,如TermFreqVector,这可以显著提升查询速度。 3. 近实时搜索:通过NRT(Near Real Time)机制,Lucene可以在短时间内反映出对索引的最新...
在项目中,你可能有一个名为`Indexer`的类,它负责读取数据源(例如,从文件、数据库或其他来源),使用Analyzer处理文本,并将处理后的数据写入到Lucene索引中。索引可以存储在文件系统或者内存中,取决于项目的...
Lucene提供了一套完整的文本检索框架,包括索引构建、查询解析、评分以及结果排序等功能。它并不直接处理网络请求,而是作为后端的搜索服务,为前端应用提供数据支持。在B/S架构下,通常会结合其他Web框架如Spring ...
Lucene的主要组成部分包括索引(Indexing)、查询(Querying)和搜索(Searching)。索引过程是将文档内容转换为倒排索引的过程,这个过程使得快速查找关键词变得可能。查询过程则是用户输入查询语句,而搜索过程则...
### Lucene索引数据库知识点详解 #### 一、Lucene简介 Lucene是一个高性能、全功能的文本搜索引擎库。它可以嵌入到任何Java应用程序中,为应用程序提供强大的文本搜索功能。Lucene支持全文检索,能够高效地处理大量...
2. **索引创建**:Lucene是如何通过Analyzer分析文本,将文本拆分成可搜索的Token,然后使用Document对象存储这些信息,并通过IndexWriter将文档写入索引的过程。 3. **字段与类型**:理解Document中的Field,如...
2. **基本概念**:可能涵盖了索引、文档、字段、术语(Term)、倒排索引等Lucene的核心概念。 3. **索引创建**:如何读取数据源(如文件、数据库),进行分词处理,并创建索引。这通常涉及Analyzer的选择和使用,...
在本例中,MyBatis3用于从数据库中检索数据,这些数据可能需要被索引到Lucene中,或者根据用户的搜索条件从Lucene索引中查找匹配的数据。 三、Lucene4.7在Web应用中的集成步骤 1. 配置依赖:首先,需要在项目中引入...
**Lucene 2.4 入门例子** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供了强大的搜索功能,被广泛应用于各种应用中的信息检索。在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和...
索引过程中,Lucene会进行分词、去除停用词等预处理操作,然后构建倒排索引。在搜索时,用户输入的查询会被同样处理,然后与索引进行匹配,返回最相关的文档。 接下来,我们要讨论`ajax例子`。在这个示例中,用户在...
此外,还需要考虑索引更新和维护,当Heritrix抓取到新的网页时,需要及时更新Lucene索引,以保持搜索结果的时效性。 总结来说,“Heritrix+Lucene搜索例子”涉及到的主要知识点包括:Heritrix的爬虫配置与网页抓取...
Lucene.NET提供了高效的索引和查询机制,能够快速地对大量文本数据进行全文搜索。它采用了倒排索引的原理,允许快速定位到包含特定关键词的文档。此外,Lucene.NET还支持多种高级查询语法,如布尔逻辑、短语查询、...
在这个“Lucene全文检索的各种例子”中,我们将探讨如何使用不同的分词器,如ikAnalyzer和smartChineseAnalyzer,来实现中文文本的索引和搜索。 首先,让我们深入理解一下Lucene。Lucene的核心功能包括文档的索引和...
首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,每个文档由多个字段组成,比如标题、内容等。索引是Lucene处理的关键...
1. **索引(Index)**:Lucene 的工作基于索引,而非实时查询数据库。索引是对文档内容进行分析、分词并存储的一个数据结构,类似于书籍的目录,可以快速定位到相关信息。 2. **文档(Document)**:在 Lucene 中,...