`
tonybo2006
  • 浏览: 9250 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Lucene查询索引的例子

阅读更多
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);
	}
}

分享到:
评论

相关推荐

    Lucene操作数据库例子

    我们将以MS SQL Server 2000中的Authors表为例,展示如何建立索引、查询及在Web界面下展示结果。 1. 数据库表Authors结构解析 - Au_id:作者号,Varchar(11) - Au_name:作者名,Varchar(60) - Phone:电话号码...

    lucene入门小例子

    在“lucene入门小例子”中,可能包含创建索引、添加文档、查询和显示结果等基本操作的示例代码。这些代码将帮助你了解如何在实际项目中集成和使用Lucene,进一步熟悉全文检索的原理和实践。 在学习过程中,你可能会...

    lucene检索小例子

    在建立索引后,"lucene检索小例子"中的搜索部分使用Analyzer、Query和IndexSearcher等组件来执行查询。Analyzer用于对查询字符串进行相同的预处理,Query对象代表了用户的查询意图,而IndexSearcher则负责在索引中...

    Lucene3.0创建索引

    本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、Lucene3.0简介 Lucene是一款高性能、全功能的全文搜索引擎库。它为开发者提供了构建搜索应用所需的所有基本工具...

    lucene开发部分例子

    这需要掌握如何将文件内容导入Lucene索引,以及如何快速定位和检索文件。 总的来说,通过这个压缩包中的例子,开发者可以从实践中学习Lucene的核心功能和使用技巧,包括索引构建、查询解析、结果处理、中文分词以及...

    lucene3.6 搜索例子

    2. 基于内存的缓存:为了提高搜索效率,Lucene允许在内存中缓存部分索引,如TermFreqVector,这可以显著提升查询速度。 3. 近实时搜索:通过NRT(Near Real Time)机制,Lucene可以在短时间内反映出对索引的最新...

    一个基于LUCENE搜索引擎项目例子

    在项目中,你可能有一个名为`Indexer`的类,它负责读取数据源(例如,从文件、数据库或其他来源),使用Analyzer处理文本,并将处理后的数据写入到Lucene索引中。索引可以存储在文件系统或者内存中,取决于项目的...

    LUCENE的搜索引擎例子

    Lucene提供了一套完整的文本检索框架,包括索引构建、查询解析、评分以及结果排序等功能。它并不直接处理网络请求,而是作为后端的搜索服务,为前端应用提供数据支持。在B/S架构下,通常会结合其他Web框架如Spring ...

    lucene3小例子

    Lucene的主要组成部分包括索引(Indexing)、查询(Querying)和搜索(Searching)。索引过程是将文档内容转换为倒排索引的过程,这个过程使得快速查找关键词变得可能。查询过程则是用户输入查询语句,而搜索过程则...

    Lucene_索引数据库.doc

    ### Lucene索引数据库知识点详解 #### 一、Lucene简介 Lucene是一个高性能、全功能的文本搜索引擎库。它可以嵌入到任何Java应用程序中,为应用程序提供强大的文本搜索功能。Lucene支持全文检索,能够高效地处理大量...

    lucene_demo例子

    2. **索引创建**:Lucene是如何通过Analyzer分析文本,将文本拆分成可搜索的Token,然后使用Document对象存储这些信息,并通过IndexWriter将文档写入索引的过程。 3. **字段与类型**:理解Document中的Field,如...

    lucene3 例子

    2. **基本概念**:可能涵盖了索引、文档、字段、术语(Term)、倒排索引等Lucene的核心概念。 3. **索引创建**:如何读取数据源(如文件、数据库),进行分词处理,并创建索引。这通常涉及Analyzer的选择和使用,...

    Lucene4.7-Web 例子

    在本例中,MyBatis3用于从数据库中检索数据,这些数据可能需要被索引到Lucene中,或者根据用户的搜索条件从Lucene索引中查找匹配的数据。 三、Lucene4.7在Web应用中的集成步骤 1. 配置依赖:首先,需要在项目中引入...

    Lucene 2.4 入门例子

    **Lucene 2.4 入门例子** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供了强大的搜索功能,被广泛应用于各种应用中的信息检索。在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和...

    lucene全文搜索ajax例子

    索引过程中,Lucene会进行分词、去除停用词等预处理操作,然后构建倒排索引。在搜索时,用户输入的查询会被同样处理,然后与索引进行匹配,返回最相关的文档。 接下来,我们要讨论`ajax例子`。在这个示例中,用户在...

    Heritrix+Lucene搜索例子

    此外,还需要考虑索引更新和维护,当Heritrix抓取到新的网页时,需要及时更新Lucene索引,以保持搜索结果的时效性。 总结来说,“Heritrix+Lucene搜索例子”涉及到的主要知识点包括:Heritrix的爬虫配置与网页抓取...

    SQLServer+Lucene.Net例子

    Lucene.NET提供了高效的索引和查询机制,能够快速地对大量文本数据进行全文搜索。它采用了倒排索引的原理,允许快速定位到包含特定关键词的文档。此外,Lucene.NET还支持多种高级查询语法,如布尔逻辑、短语查询、...

    Lucene 全文检索的 各种例子

    在这个“Lucene全文检索的各种例子”中,我们将探讨如何使用不同的分词器,如ikAnalyzer和smartChineseAnalyzer,来实现中文文本的索引和搜索。 首先,让我们深入理解一下Lucene。Lucene的核心功能包括文档的索引和...

    lucene搜索的简单入门例子源代码

    首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,每个文档由多个字段组成,比如标题、内容等。索引是Lucene处理的关键...

    lucene的一个实用例子

    1. **索引(Index)**:Lucene 的工作基于索引,而非实时查询数据库。索引是对文档内容进行分析、分词并存储的一个数据结构,类似于书籍的目录,可以快速定位到相关信息。 2. **文档(Document)**:在 Lucene 中,...

Global site tag (gtag.js) - Google Analytics