lucene为程序添加搜索功能,此功能基于已创建好的文档的索引之上。这里我已经为一些文档建立了索引,并保存到硬盘上。下面开始针对这些索引,添加搜索功能。
1、简单的TermQuery搜索
/**
* 【TermQuery方式搜索】
*
* 对特定的项进行查询,如filename等于XPP3-LICENSE.txt的文件
* @throws Exception
*/
public void testTerm() throws Exception {
Directory dir=FSDirectory.open(new File("d:/index/book_index/"));
IndexSearcher searcher=new IndexSearcher(dir);
Term t=new Term("content","params");
Query query=new TermQuery(t);
TopDocs docs=searcher.search(query, 10);
System.out.println(docs.totalHits+"--------");
t=new Term("filename","version");
docs=searcher.search(new TermQuery(t), 10);
System.out.println(docs.totalHits);
searcher.close();
dir.close();
}
2、使用QueryParser转化用户复杂输入,进行与或非查询操作。
/**
* 【QueryParser查询】
*
*
* 模糊查询,与,或,非方式
* @throws Exception
*/
public void testQueryParse() throws Exception{
Directory dir=FSDirectory.open(new File("d:/index/book_index/"));
IndexSearcher search=new IndexSearcher(dir);
QueryParser parser=new QueryParser(Version.LUCENE_30,"content",new SimpleAnalyzer());
Query query=parser.parse("+ADVISED +POSSIBILITY -JAVA");
TopDocs docs=search.search(query, 10);
/ assertEquals(1, docs.totalHits);
Document document=search.doc(docs.scoreDocs[0].doc);
System.out.println("查询第一个的名称"+document.get("filename"));
System.out.println("与或非查询个数"+docs.totalHits);
query=parser.parse("Indiana OR University");
docs=search.search(query, 10);
System.out.println("Or查询个数"+docs.totalHits);
search.close();
dir.close();
}
查询表达式
|
匹配文档
|
Java
|
默认域包含有Java项的文档
|
Java junit
Java OR junit
|
默认域包含有Java,junit中一个,或者两个的文档
|
+Java +junit
Java AND junit
|
默认域同时包含有Java和junit的文档
|
Title:ant
|
Title域中包含有ant的文档
|
Title:extreme -subject:sport
Title:extreme AND NOT subject:sport
|
Title域中包含extreme而且subject域中不包含sport
|
(agile OR extreme) AND methody
|
默认域包含有methody且包含agile或者extreme中的一个
|
Title:“junit in action”
|
Title域一定为junit in action的文档
|
Title:“junit action“ -5
|
Title域中junit和action的间隔小于5的文档
|
Java*
|
包含有Java开头的文档,如Javascript,Javaserver,Java等
|
Java~
|
包含与Java单词相近的文档,如Java
|
Lastdate:[1/1/09 TO 12/31/09]
|
Lastdate域在09年1月1号到09年12月31号的文档
|
3、近实时搜索
/**
* 【近实时搜索】
*
* @throws Exception
*/
public void testNRTsearch() throws Exception{
Directory dir=new RAMDirectory();
IndexWriter writer=new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
for (int i = 0; i < 10; i++) {
Document doc=new Document();
doc.add(new Field("id", ""+i, Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("text", "aaa", Field.Store.NO, Field.Index.ANALYZED ));
writer.addDocument(doc);
}
IndexReader reader=writer.getReader();
IndexSearcher searcher=new IndexSearcher(reader);
Query query=new TermQuery(new Term("text","aaa"));
TopDocs docs=searcher.search(query, 1);
System.out.println("[搜索的总数]"+docs.totalHits);
//先删除id为7的文档,然后添加一个id为22的文档,进行搜索,看是不是近实时的
writer.deleteDocuments(new Term("id","7"));
Document doc=new Document();
doc.add(new Field("id", "22", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("text","bbb",Field.Store.NO,Field.Index.ANALYZED));
writer.addDocument(doc);
//重启reader,然后搜索
IndexReader newReader=reader.reopen();
assertEquals(reader==newReader,false);
reader.close();
searcher=new IndexSearcher(newReader);
TopDocs hits=searcher.search(query, 10);
assertEquals(9, hits.totalHits);
query=new TermQuery(new Term("text","bbb"));
hits=searcher.search(query, 10);
System.out.println("bbb文档的个数:"+hits.totalHits);
//关闭资源
newReader.close();
writer.close();
}
分享到:
相关推荐
以上就是Lucene 3.6的学习笔记,涵盖了从基础到高级的各种搜索和索引操作,以及相关的分词和扩展功能。通过学习这些内容,可以深入理解Lucene的工作机制,并利用其强大的搜索能力构建高效的应用。
在本篇文章中,我们将深入探讨Lucene 3.6版本中的搜索功能,通过实例解析其核心概念和操作流程。 一、Lucene概述 Lucene的出现,使得开发人员能够轻松地在他们的应用中添加高级搜索功能。作为一个高性能的信息检索...
这里的“lucene3.6.jar”是一个包含了Lucene 3.6版本核心功能的Java类库,它是实现全文检索的基础。 Lucene的核心特性包括索引构建、查询解析、搜索执行以及结果排序等。索引构建允许开发者将大量文本数据转换为...
总结来说,Lucene 3.6提供了一套完整的全文检索解决方案,从文本预处理、索引构建到查询执行,再到结果展示,涵盖了搜索引擎的各个环节。熟练掌握Lucene,能够帮助你构建自己的高效搜索系统,满足各种数据检索需求。...
版本3.6是其历史上的一个稳定版本,提供了强大的索引和搜索功能,广泛应用于各种搜索引擎和信息检索系统。IKAnalyzer与Lucene结合使用,能够提升中文文本的搜索性能和精度。 IKAnalyzer的修复源码主要关注的是用户...
lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全
在 Lucene 3.6 版本中,它提供了强大的文本搜索功能,适用于Java开发人员。这个版本相对稳定,对于初学者来说是一个很好的学习起点。 首先,我们来了解一下 Lucene 的核心概念: 1. **索引(Index)**:Lucene 的...
在网上找了实例,但是发现不能使用,只能简历索引。...lucene3.6版本,能够建立索引,能搜索。inderwriter,indexsearch. 其中包C下的helloword实例能用,其余的全是网上不能用的。直接下载 可以运行
在3.6版本中,Lucene提供了一套完整的搜索解决方案,包括索引构建、查询解析、结果排序等功能。本指南将深入探讨基于Lucene 3.6的搜索工具包及其使用方法。 一、Lucene 3.6核心组件 1. 分析器(Analyzer):负责对...
总结,Lucene 3.6 是一个强大的全文检索工具,通过理解它的基本概念、主要组件以及不同类型的查询,开发者可以快速构建起自己的全文搜索引擎。对于初学者而言,这个版本提供了足够的学习资源和实践机会,是深入理解...
在这个入门案例中,我们将深入理解如何使用 Lucene 3.6 版本来构建基本的文本搜索引擎。 首先,我们需要了解 Lucene 的核心概念: 1. **索引(Indexing)**:Lucene 的工作始于创建索引,将文档内容转化为可搜索的...
在版本3.6中,Lucene提供了一整套强大的文本搜索功能,包括索引、查询、排序、分词等。这个版本的源代码为我们提供了深入了解搜索引擎工作原理的机会。 首先,我们要明确的是,Lucene的核心在于它的索引机制。在`...
Apache Lucene是一个高性能、全文本搜索库,它为开发者提供了强大的文本搜索功能,使得在各种应用中实现复杂而高效的搜索引擎成为可能。在这个小案例中,我们将了解Lucene的基本概念,以及如何构建一个简单的全文...
在信息技术领域,搜索引擎是数据检索的核心工具,而Lucene作为Apache软件基金会的开源全文搜索引擎库,因其强大的搜索功能和灵活性,被广泛应用于各种项目中。本次我们关注的是Lucene 3.6版本,它在前一版本的基础上...
本文档详细介绍了lucene3.6中的索引,以及每个部分对应于硬盘下的文件夹里的哪个文件。这个根据本人多年学术及编程经验总结的
除了基本的检索功能,Lucene还提供了高级搜索特性,如布尔查询、短语查询、模糊查询和近似查询等。用户可以通过构造复杂的查询条件,精确地找到所需的信息。同时,Lucene还支持权重计算,可以根据词频、位置等多种...
Lucene是一个高性能、全文检索库,广泛用于构建搜索功能强大的应用程序。这份教程通过完整的代码示例,为学习者提供了实践操作的机会,从而深入理解Lucene的核心机制。 首先,了解Lucene的基本架构至关重要。Lucene...
【标题】:“第一个Lucene 3.6 (3.X) 入门实例” ...总之,Lucene 3.6入门实例涉及从设置开发环境、创建索引到实现搜索功能的全过程。理解这些基本步骤和核心概念,是掌握Lucene并进一步构建高效检索系统的基石。
《深入剖析Lucene 3.6源码》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护,被广泛应用于各种搜索引擎的构建。Lucene 3.6.1是其历史版本之一,虽然现在有更新的版本,但3.6.1版本因其稳定性及...
4. 搜索引擎API:Lucene提供了一套丰富的API,开发者可以通过这些API实现索引构建、查询执行、结果排序等功能。3.6.1版本的API更加稳定,易于使用。 三、3.6.1版本特性 1. 近实时搜索:Lucene 3.6.1引入了NRT(Near...