`

lucene入门系列(三、建立搜索)

阅读更多
package com.heming.lucene.process;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;

/**
 * 搜索
 * 
 * @author 何明
 * 
 */
public class Search {

	private String INDEX_STORE_PATH = "d:\\index";

	/**
	 * 利用Lucene的搜索
	 * 
	 * @param searchType
	 *            代表重要搜索的Filed
	 * @param searchKey
	 *            代表关键字
	 */
	public void indexSearch(String searchType, String searchKey) {

		try {

			// 根据索引位置建立 IndexSearcher
			IndexSearcher searcher = new IndexSearcher(INDEX_STORE_PATH);

			// 建立搜索单元,searchType代表重要搜索的Filed,searchKey代表关键字
			Term t = new Term(searchType, searchKey);

			// 由Term生成一个Query
			Query q = new TermQuery(t);

			// 搜索开始时间
			Date beginTime = new Date();

			// 获取一个<document,frequency>的枚举对象TermDocs
			TermDocs termDocs = searcher.getIndexReader().termDocs(t);

			while (termDocs.next()) {

				// 输出文件中出现关键词的次数
				System.out.println(termDocs.freq());

				// 输出搜索到关键词的文档
				// System.out.println(searcher.getIndexReader().document(termDocs.doc()));

			}

			// 搜索完成时间
			Date endTime = new Date();

			// 搜索所耗时间
			long timeOfSearch = endTime.getTime() - beginTime.getTime();

			System.out.println("The time For indexsearch is " + timeOfSearch
					+ "ms");

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	/**
	 * 利用String的搜索
	 * 
	 * @param keyWord
	 *            关键词
	 * @param searchDir
	 *            搜索目录
	 */
	public void StringSearch(String keyWord, String searchDir) {

		File filesDir = new File(searchDir);

		// 返回目录文件夹所有文件数组
		File[] files = filesDir.listFiles();

		// HashMap保存文件名和匹配次数对
		Map rs = new HashMap();

		// 记录搜索开始时间
		Date beginTime = new Date();

		// 遍历所有文件
		for (int i = 0; i < files.length; ++i) {

			// 初始化匹次数
			int hits = 0;

			try {

				// 读取文件内容
				BufferedReader br = new BufferedReader(new FileReader(files[i]));

				StringBuffer sb = new StringBuffer();

				String line = br.readLine();

				while (null != line) {

					sb.append(line);

					line = br.readLine();

				}

				br.close();

				// 将StringBuffer转化成String,便于搜索
				String stringToSearch = sb.toString();

				// 初始化fromIndex
				int fromIndex = -keyWord.length();

				// 逐个匹配关键词
				while (-1 != (fromIndex = stringToSearch.indexOf(keyWord,
						fromIndex + keyWord.length()))) {

					++hits;

				}

				// 将文件名和匹配次数加入HashMap中
				rs.put(files[i].getName(), new Integer(hits));

			} catch (Exception e) {

				e.printStackTrace();

			}

			// 输出查询结果
			Iterator it = rs.keySet().iterator();

			while (it.hasNext()) {

				String fileName = (String) it.next();

				Integer hit = (Integer) rs.get(fileName);

//				System.out.println("find" + hit.intValue() + "matches in "
//						+ fileName);
//				;

			}

			// 记录结束时间
			Date endTime = new Date();

			// 得到搜索耗费时间
			long timeOfSearch = endTime.getTime() - beginTime.getTime();

			System.out.println("The time For string search is " + timeOfSearch
					+ "ms");

		}

	}

	public static void main(String[] args) {

		Search search = new Search();

		// 通过索引搜索关键词
		search.indexSearch("content", "String");

		// 通过String的API搜索关键词
		search.StringSearch("line", "d:\\test");

	}

}

1
0
分享到:
评论
3 楼 maike 2010-08-05  
在3试试了,发现无法搜索出结果
2 楼 WIN 2009-07-01  
jy1245626 写道
3的出来了???

不是,这是我出的系列 我用的LUCENE是2.4的版本,这里的3是代表第三节的意思
1 楼 jy1245626 2009-06-30  
3的出来了???

相关推荐

    Lucene入门学习文档

    **Lucene入门学习文档** **一、什么是Lucene** Lucene是Apache软件基金会下的一个开源全文检索库,它提供了一个高性能、可扩展的信息检索服务。Lucene最初由Doug Cutting开发,现在已经成为Java社区中事实上的标准...

    lucene入门指南

    Lucene 可以与其他开源项目结合,如 Solr 提供了 Web 接口和集群支持,Elasticsearch 建立在 Lucene 之上,提供了更高级的分布式搜索和分析功能。 总之,Lucene 是一个强大的搜索引擎框架,通过理解和掌握其核心...

    Lucene使用lucene入门[归类].pdf

    Lucene 的核心功能是接收一系列字符串输入,然后构建索引,为用户提供全文搜索服务,帮助定位关键词所在的位置。 【Lucene 应用场景】 Lucene 的应用场景广泛,可以用于站内新闻的搜索、数据库表字段的快速检索,...

    Lucene的简单介绍

    Lucene在搜索过程中,首先需要建立索引。索引过程包括准备需要索引的文档、通过分词组件去除标点和停用词、通过语言处理组件进行词元处理(例如转换为小写和词根)、最后将处理后的词(Term)传给索引组件,生成字典...

    Lucene快速入门

    ### Lucene快速入门知识点 #### 1. Lucene简介 ##### 1.1 Lucene的历史 - **创始人**: Lucene由一位资深的全文索引/检索专家开发。 - **开源历程**: 最初发布在其个人主页上,2001年10月捐赠给Apache基金会,成为...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-08.Lucene搜索实战2 共5页.pptx

    Lucene入门与系统架构** Lucene的入门课程介绍了如何快速上手使用Lucene,包括基本概念、环境搭建以及简单的索引和搜索操作。系统架构部分则深入解析了Lucene的工作原理,如倒排索引的构建、存储结构以及数据流处理...

    Lucene创建与搜索索引

    doc.add(new TextField("title", "Lucene入门指南", Field.Store.YES)); doc.add(new StringField("author", "张三", Field.Store.YES)); doc.add(new IntField("year", 2023, Field.Store.YES)); ``` 这里我们创建...

    lucene3.0 in action

    为了帮助开发者更好地利用Lucene,本书还介绍了一系列工具和扩展,包括性能测试框架、管理工具等,这些都是构建高质量搜索系统的宝贵资源。 ### Lucene端口 对于那些希望在非Java环境中使用Lucene的开发者,书中也...

    Lucene In Action second edition

    ### Lucene in Action 第二版:深入探索 Java 搜索技术 #### 一、引言 《Lucene in Action》第二版是一本专为希望利用 Apache Lucene 进行高效搜索功能开发的技术人员编写的权威指南。本书由 Michael McCandless、...

    Lucene简单应用

    #### 二、Lucene的入门实例 - 在本章节中,我们将学习如何安装和配置Lucene环境,包括下载最新版本的Lucene并设置相应的开发环境。 - 通过一个简单的示例来展示如何使用Lucene创建索引以及如何执行基本的全文搜索...

    lucene的资料

    2. **文档分析(Document Analysis)**:在建立索引之前,Lucene会进行文本预处理,包括分词(Tokenization)、去除停用词(Stop Word Removal)、词形还原(Lemmatization)等步骤,以便更精确地匹配查询。...

    JAVA_Lucene_in_Action教程完整版

    - **接触Lucene**:介绍Lucene的基本概念和技术特点,适合初学者入门。 - **索引**:详解如何使用Lucene建立文档索引,包括索引的结构设计、存储策略等。 - **为程序添加搜索功能**:讲解如何将Lucene集成到现有的...

    Lucene分词查询

    索引是Lucene对大量数据进行高效搜索的基础,它将原始文本转换成一系列可搜索的表示形式。在Lucene中,我们可以创建一个`IndexWriter`对象来添加文档到索引中。每个文档由多个字段(Field)组成,如标题、内容等,每...

    lucene例子

    "LuceneHelloWorld"通常是一个简单的入门程序,用于演示如何使用Lucene进行基本的索引和搜索操作。以下是一般步骤: 1. 引入依赖:首先,你需要在项目中引入Lucene的依赖库。 2. 创建索引:创建一个`Directory`...

    luncene入门例子

    这个压缩包提供的"lucene第一天"是一系列入门教程,旨在帮助初学者快速理解并掌握Lucene的核心概念和基本操作。 首先,让我们了解一下Lucene的基本组件和工作原理。Lucene的核心功能是索引和搜索文本数据。它将非...

    Compass全文检索系列之一:Compass入门

    Compass全文检索系列之一:Compass入门 在IT领域,全文检索已经成为数据分析和信息检索的重要技术,尤其是在大数据时代。本文将介绍Compass,一个基于Lucene的全文搜索引擎库,为Java开发者提供了一种简单易用的...

    搜索引擎Luecne技术--助教PPT

    尽管Lucene本身不是一个完整的搜索引擎解决方案,但它提供了构建此类解决方案所需的基础组件。 - **全文检索系统的结构** 全文检索系统的基本结构通常包括以下几个部分: - 数据采集:获取文档或网页等数据源。 ...

Global site tag (gtag.js) - Google Analytics