今天下午按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容器中。
分享到:
相关推荐
《Lucene 3.6 搜索实例解析》 Apache Lucene 是一个开源全文搜索引擎库,为开发者提供了在Java应用程序中实现高效...在实践中,理解并掌握Lucene的这些关键概念和流程,将有助于提升搜索体验,增强应用的核心竞争力。
这个"Lucene搜索例子"是一个实际的Web项目,演示了如何在Web环境中使用Lucene进行全文搜索,并实现分页显示。它涵盖了索引创建、查询执行和结果分页的关键步骤,是学习和理解Lucene搜索引擎功能的绝佳实践。通过深入...
在《开发自己的搜索引擎》一书中,通过`ch2-lucene入门小例子`,读者可以了解到如何使用Lucene 2.0创建简单的搜索引擎,例如建立索引、执行搜索等基本操作。而`myReserch-可用的网络搜索引擎`可能包含一个完整的搜索...
《深入理解Lucene:基于lucene-4.10.0的索引与搜索实践》 Lucene,作为Apache软件基金会的一个开源项目,是Java语言编写的信息检索库,广泛应用于全文搜索引擎的开发。本篇文章将深入探讨lucene-4.10.0版本中的关键...
总结来说,"lucene.zip"包含了一个基于Lucene的简单搜索系统实例,利用了IK分词器对中文文本进行分词,构建了索引,并实现了搜索功能。这个例子对于理解和学习如何在实际项目中使用Lucene进行信息检索是非常有价值的...
用简单的例子介绍了Lucene的最新应用方法,包括完整的搜索实现过程:从完成索引到搜索用户界面的实现。此外还进一步介绍了实现准实时搜索的方法,展示了Solr的用法以及实现分布式搜索服务集群的方法。最后介绍了在...
- "Lucene+hibernate+spring配置心得" 描述了如何将这三个组件整合,提供了一种在Java企业级应用中实现全文搜索的解决方案。 - "Hibernate_search.ppt" 和 "lucene.ppt" 可能是相关的演示文稿,它们可能详细解释了...
在本文中,我们将深入探讨Apache Lucene,这是一个广泛使用的全文搜索引擎库,专为软件开发者设计,以便在他们的应用程序中实现高效、快速的全文检索功能。Lucene提供了丰富的API,可以帮助开发者构建自己的搜索引擎...
总结来说,Lucene通过创建索引、添加文档、解析查询和执行搜索来实现全文检索。在这个简单的例子中,我们使用了StandardAnalyzer进行文本分析,RAMDirectory存储索引,以及QueryParser构建查询。实际应用中,你可能...
- **第 2 章:快速上手**:通过一个简单的例子来演示如何使用 Lucene 创建索引并执行搜索。 - **第 3 章:理解文档和字段**:详细解释文档和字段的概念,以及如何在实际应用中合理设计文档结构。 ##### 3.2 第二...
- **实践导向**:强调动手实践,通过具体的例子让读者能够快速上手并掌握 Lucene 的使用技巧。 - **综合性强**:不仅涵盖了 Lucene 的基本使用方法,还包括高级定制化功能,适合不同层次的读者需求。 - **易于理解**...
#### 二、Lucene入门实例 -Lucene是Apache基金会旗下的一个开源文本搜索库,它提供了全面的搜索功能。本章节通过一个简单的实例来介绍如何使用Lucene进行文本索引和搜索,让读者快速上手。 #### 三、Lucene索引的...
实际应用中,应考虑更复杂的查询逻辑和优化,如使用全文搜索引擎(如Lucene或SOLR)提升性能。 总结,ASP作为一款老牌的服务器端脚本语言,虽然现在已被ASP.NET等现代技术取代,但在处理小型项目或维护旧系统时仍有...
在这个例子中,我们为名为"text_ansj"的字段指定了AnsjTokenizerFactory,并添加了关键词过滤、小写转换和停用词过滤等常见步骤。 3. 配置参数:AnsjTokenizerFactory允许用户通过参数定制分词行为。例如,你可以...
- **应用场景**:通过具体例子说明Transforms如何在实际工作中提升Elasticsearch的数据分析能力。 #### 6. 使用ElasticStack进行地理空间数据分析 - **地理空间数据处理**:探讨如何利用ElasticStack(Elastic...
《深入学习Solr5:利用IK分词器的实践指南》...总结来说,掌握如何在Solr5中使用IK分词器,是提升中文搜索质量和效率的关键。通过对分词器的深入理解、合理配置以及适时优化,我们可以构建出更加智能、高效的搜索系统。
1. **基于Lucene自封装实现站内搜索**:这种方式需要较大的开发投入,并且在后续维护和扩展上也会比较复杂,因此在本教材中并未推荐此方法。 2. **调用第三方搜索引擎API**(如Google或Baidu API):虽然这种方式...
在这个例子中,我们创建了一个搜索方法,接受索引名和查询字符串作为参数,然后返回匹配结果。 **总结** "php+elastic2.0"是一个关于如何在PHP7环境下利用Elasticsearch 7.12版本进行数据存储、检索和分析的实践。...
总结,"account.zip"中的"account.json"文件提供了学习和实践Elasticsearch数据导入、索引管理和查询分析的良好素材。通过对这些数据的处理,我们可以深入了解Elasticsearch在处理结构化JSON数据时的高效性和灵活性...
在IT行业中, Elasticsearch(ES)是一种广泛使用的分布式搜索引擎,它基于Lucene库,以其高效、可扩展和实时的搜索能力而闻名。在这个名为"Demo.zip_DEMO_YOG_查询es"的压缩包文件中,我们可以推测它包含了演示如何...