`
xtugtf
  • 浏览: 24618 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

lucene中搜索例子实践总结二

阅读更多

 

        今天下午按lucene in action调试了建立文本文件索引的例子,晚上又来调试一下基于索引的搜索例子过程(体会一下空间换取时间的感觉,呵呵),先回顾一下建立索引的过程:

     1)利用IndexWriter对象及StandarAnalyzer关联输出的索引文件夹;

     2)对IndexWriter对象进行相关设置,利用递归遍历被索引的文件夹所有文本文件并建立filed ,document为结构的索引。

      3)IndexWriter对象调用close方法,正式将建立的索引文件存入磁盘索引文件夹中。

 

下面在索引的基础上来写搜索例子,照书抄了一下,呵呵。代码如下:

     /*******************************************************************************

 * 该类主要功能及特点:use lucene's Query Class and Indexsearcher Class to search keywords
 * from index dictionary of text files
 * 
 * @see(与该类相关的类:)
 * 
 * 开发公司或单位:XX软件有限公司研发中心 版权:本软件版权归属XX公司研发中心
 * 
 * @author (作者):张XX
 * @since (该文件所支持的jdk版本):jdk1.5或以上
 * @version (版本):1.0
 * 
 * @date ():2009-2-22 最后更改日期:2009-2-22
 * 
 * 修改人:张XX
 * 
 * 复审人:张三,李四,王五
 * 
 */
// *************************************************************************************
package com.goodwitkey.searcher;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class Searcher {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		if (args.length != 2) {
			throw new Exception("java: " + Searcher.class.getName()
					+ "<indexdir indir>,<query>");
		}
		File indexdir = new File(args[0]);
		String qr = args[1];
		if ((!indexdir.exists()) || (!indexdir.isDirectory())) {
			throw new Exception(indexdir.toString()
					+ "is not exist or is not a directory");
		}

		search(indexdir, qr);
	}

	/**
	 * @param indexdir
	 * @param query
	 * @throws IOException
	 * @throws ParseException
	 */
	public static void search(File indexdir, String qr) throws IOException,
			ParseException {
		Directory fsDir = FSDirectory.getDirectory(indexdir, false);
		IndexSearcher is = new IndexSearcher(fsDir);
		Query query = QueryParser.parse(qr, "contents", new StandardAnalyzer());
		long starttime = new Date().getTime();
		Hits hits = is.search(query);
		long endtime = new Date().getTime();
		System.out.println("Search the key word has elapsed "
				+ (endtime - starttime) + "ms");
		for (int i = 0; i < hits.length(); i++) {
			Document doc = hits.doc(i);
			System.out.println(doc.get("filename"));
		}
	}

}

 

 

 这就没有遇到什么问题,比较顺利,运行结果如下:

    Search the key word has elapsed 16ms

C:\data\赖昌星.txt
Document<Keyword<filename:C:\data\赖昌星.txt>>

 总结一下流程:

     1)用SearcherWriter对象来指向索引目录(用FSDirectory类完成);

     2)用Query的具体对象来解析要搜索的关键字或词;

      3) 执行搜索并将得到结果放到hits容器中。

分享到:
评论

相关推荐

    lucene3.6 搜索例子

    《Lucene 3.6 搜索实例解析》 Apache Lucene 是一个开源全文搜索引擎库,为开发者提供了在Java应用程序中实现高效...在实践中,理解并掌握Lucene的这些关键概念和流程,将有助于提升搜索体验,增强应用的核心竞争力。

    Lucene搜索例子

    这个"Lucene搜索例子"是一个实际的Web项目,演示了如何在Web环境中使用Lucene进行全文搜索,并实现分页显示。它涵盖了索引创建、查询执行和结果分页的关键步骤,是学习和理解Lucene搜索引擎功能的绝佳实践。通过深入...

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    在《开发自己的搜索引擎》一书中,通过`ch2-lucene入门小例子`,读者可以了解到如何使用Lucene 2.0创建简单的搜索引擎,例如建立索引、执行搜索等基本操作。而`myReserch-可用的网络搜索引擎`可能包含一个完整的搜索...

    lucene例子

    《深入理解Lucene:基于lucene-4.10.0的索引与搜索实践》 Lucene,作为Apache软件基金会的一个开源项目,是Java语言编写的信息检索库,广泛应用于全文搜索引擎的开发。本篇文章将深入探讨lucene-4.10.0版本中的关键...

    lucene.zip

    总结来说,"lucene.zip"包含了一个基于Lucene的简单搜索系统实例,利用了IK分词器对中文文本进行分词,构建了索引,并实现了搜索功能。这个例子对于理解和学习如何在实际项目中使用Lucene进行信息检索是非常有价值的...

    解密搜索引擎技术实战-Lucene&java;精华版

    用简单的例子介绍了Lucene的最新应用方法,包括完整的搜索实现过程:从完成索引到搜索用户界面的实现。此外还进一步介绍了实现准实时搜索的方法,展示了Solr的用法以及实现分布式搜索服务集群的方法。最后介绍了在...

    lucene深入浅出

    - "Lucene+hibernate+spring配置心得" 描述了如何将这三个组件整合,提供了一种在Java企业级应用中实现全文搜索的解决方案。 - "Hibernate_search.ppt" 和 "lucene.ppt" 可能是相关的演示文稿,它们可能详细解释了...

    Lucene学习总结

    在本文中,我们将深入探讨Apache Lucene,这是一个广泛使用的全文搜索引擎库,专为软件开发者设计,以便在他们的应用程序中实现高效、快速的全文检索功能。Lucene提供了丰富的API,可以帮助开发者构建自己的搜索引擎...

    lucene简单代码列子

    总结来说,Lucene通过创建索引、添加文档、解析查询和执行搜索来实现全文检索。在这个简单的例子中,我们使用了StandardAnalyzer进行文本分析,RAMDirectory存储索引,以及QueryParser构建查询。实际应用中,你可能...

    Lucene In Action second edition

    - **第 2 章:快速上手**:通过一个简单的例子来演示如何使用 Lucene 创建索引并执行搜索。 - **第 3 章:理解文档和字段**:详细解释文档和字段的概念,以及如何在实际应用中合理设计文档结构。 ##### 3.2 第二...

    Lucene In Action

    - **实践导向**:强调动手实践,通过具体的例子让读者能够快速上手并掌握 Lucene 的使用技巧。 - **综合性强**:不仅涵盖了 Lucene 的基本使用方法,还包括高级定制化功能,适合不同层次的读者需求。 - **易于理解**...

    自己动手写搜索引擎

    #### 二、Lucene入门实例 -Lucene是Apache基金会旗下的一个开源文本搜索库,它提供了全面的搜索功能。本章节通过一个简单的实例来介绍如何使用Lucene进行文本索引和搜索,让读者快速上手。 #### 三、Lucene索引的...

    一个不错的站内搜索程序

    实际应用中,应考虑更复杂的查询逻辑和优化,如使用全文搜索引擎(如Lucene或SOLR)提升性能。 总结,ASP作为一款老牌的服务器端脚本语言,虽然现在已被ASP.NET等现代技术取代,但在处理小型项目或维护旧系统时仍有...

    AnsjTokenizerFactory

    在这个例子中,我们为名为"text_ansj"的字段指定了AnsjTokenizerFactory,并添加了关键词过滤、小写转换和停用词过滤等常见步骤。 3. 配置参数:AnsjTokenizerFactory允许用户通过参数定制分词行为。例如,你可以...

    Elasticsearch八大经典应用.pdf

    - **应用场景**:通过具体例子说明Transforms如何在实际工作中提升Elasticsearch的数据分析能力。 #### 6. 使用ElasticStack进行地理空间数据分析 - **地理空间数据处理**:探讨如何利用ElasticStack(Elastic...

    跟益达学Solr5之使用IK分词器

    《深入学习Solr5:利用IK分词器的实践指南》...总结来说,掌握如何在Solr5中使用IK分词器,是提升中文搜索质量和效率的关键。通过对分词器的深入理解、合理配置以及适时优化,我们可以构建出更加智能、高效的搜索系统。

    solr教材-PDF版

    1. **基于Lucene自封装实现站内搜索**:这种方式需要较大的开发投入,并且在后续维护和扩展上也会比较复杂,因此在本教材中并未推荐此方法。 2. **调用第三方搜索引擎API**(如Google或Baidu API):虽然这种方式...

    php+elastic2.0

    在这个例子中,我们创建了一个搜索方法,接受索引名和查询字符串作为参数,然后返回匹配结果。 **总结** "php+elastic2.0"是一个关于如何在PHP7环境下利用Elasticsearch 7.12版本进行数据存储、检索和分析的实践。...

    account.zip

    总结,"account.zip"中的"account.json"文件提供了学习和实践Elasticsearch数据导入、索引管理和查询分析的良好素材。通过对这些数据的处理,我们可以深入了解Elasticsearch在处理结构化JSON数据时的高效性和灵活性...

    Demo.zip_DEMO_YOG_查询es

    在IT行业中, Elasticsearch(ES)是一种广泛使用的分布式搜索引擎,它基于Lucene库,以其高效、可扩展和实时的搜索能力而闻名。在这个名为"Demo.zip_DEMO_YOG_查询es"的压缩包文件中,我们可以推测它包含了演示如何...

Global site tag (gtag.js) - Google Analytics