创建索引
/**
* @author wanghuan
* @description 创建索引
* @throws CorruptIndexException
* @throws LockObtainFailedException
* @throws IOException
*/
public void createIndex() throws CorruptIndexException, LockObtainFailedException, IOException{
List<Hospital> list=Database.query();
/* 创建索引初始化,执行这些语句将创建或清空d:\\save\\目录下所有索引 */
IndexWriter writer1 = new IndexWriter("d:\\save\\",new StandardAnalyzer(), true);
writer1.close();
/*
* 往创建的初始化索引中添加索引内容,StandardAnalyzer表示用lucene自带的标准分词机制,
* false表示不覆盖原来该目录的索引,细心的读者可能已经发现, 这句话和上面的那句就这个false不一样
*/
IndexWriter writer2 = new IndexWriter("d:\\save\\",new StandardAnalyzer(), false);
//创建文档
for(Hospital hosp:list){
Document doc = new Document();
Field field1 = new Field("hospId", hosp.getId()+"", Field.Store.YES,Field.Index.TOKENIZED);
/* 往文件里添加这个域 */
doc.add(field1);
/* 同理:创建另外一个域ArticleText,并往这个域里面添加内容 */
Field field2 = new Field("hospName", hosp.getName(),Field.Store.YES, Field.Index.TOKENIZED);
doc.add(field2);
// //为字段 sname 建索引
// doc.add(new Field("hospName",hosp.getName(),Field.Store.YES,Field.Index.TOKENIZED));
System.out.println(hosp.getName());
writer2.addDocument(doc);
}
//关闭流
writer2.close();
}
搜索
/**
* @author wanghuan
* @param serchString
* @throws Exception
*/
public void search(String serchString) throws Exception {
/* 创建一个搜索,搜索刚才创建的d:\\save\\目录下的索引 */
IndexSearcher indexSearcher = new IndexSearcher("d:\\save\\");
/* 在这里我们只需要搜索一个目录 */
IndexSearcher indexSearchers[] = { indexSearcher };
/* 我们需要搜索两个域"ArticleTitle", "ArticleText"里面的内容 */
String[] fields = { "hospId", "hospName" };
/* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */
BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,BooleanClause.Occur.SHOULD };
/*
* MultiFieldQueryParser表示多个域解析,
* 同时可以解析含空格的字符串,如果我们搜索"中国 金牌",根据前面的索引,显然搜到的是第二份文件
*/
Query query = MultiFieldQueryParser.parse(serchString, fields, clauses,new StandardAnalyzer());
/* Multisearcher表示多目录搜索,在这里我们只有一个目录 */
MultiSearcher searcher = new MultiSearcher(indexSearchers);
/* 开始搜索 */
Hits h = searcher.search(query);
/* 把搜索出来的所有文件打印出来 */
for (int i = 0; i < h.length(); i++) {
/* 打印出文件里面ArticleTitle域里面的内容 */
System.out.println(h.doc(i).get("hospId"));
/* 打印出文件里面ArticleText域里面的内容 */
System.out.println(h.doc(i).get("hospName"));
}
/* 关闭 */
searcher.close();
}
分享到:
相关推荐
而《Lucene的搜索引擎设计与实现》则深入剖析了搜索引擎的设计原理,通过实例展示了Lucene如何应用于实际项目。 总的来说,这个压缩包提供了全面的Lucene学习资源,无论你是刚刚接触Lucene的新手,还是希望深化理解...
在上述文档中,我们看到如何利用 Lucene 来对 MS SQL Server 2000 中的数据库进行全文索引,并创建查询功能。 1. **建立索引** - 首先,你需要编写一个传统的 JDBC 程序来从数据库中读取数据。这涉及到建立数据库...
1. **索引创建**:Lucene.NET 的工作首先从创建索引开始,这涉及到读取数据源(如文件、数据库或网页),然后将这些数据转化为 Lucene 可理解的格式,存储为倒排索引。在这个实例中,你可能会看到如何使用 `...
【标题】:“Lucene3 实例解析” 在深入探讨Lucene3这个主题之前,我们先来了解一下Lucene是什么。Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统中,包括搜索引擎、内容管理...
**Lucene 搜索实例** Apache Lucene 是一个高性能、全文本搜索引擎库,它为开发者提供了在各种应用程序中实现全文检索的工具集。Lucene 并不是一个完整的应用,而是一个 Java 类库,可以被其他 Java 应用程序所使用...
- **文档(Document)**:是Lucene处理的基本单位,通常代表数据库中的一条记录或者一个网页。文档包含一系列字段(Field),每个字段都有一个名字和对应的值。 - **字段(Field)**:字段是文档的组成部分,如标题...
1. 文档(Document):在Lucene中,文档是信息的基本单位,可以理解为数据库中的一条记录,包含多个字段(Field)。 2. 字段(Field):文档由多个字段组成,每个字段都有特定的含义,如标题(Title)、内容...
2. **Document**:在Lucene中,一个Document类代表了一个可被搜索的信息单元,比如一个文件或数据库中的一个记录。Document可以包含多个字段(Field),每个字段都有特定的类型(如Text、Keyword等),并可以设置...
**Lucene 5.2.1 实例详解** Lucene 是一个开源的全文搜索引擎库,由Apache软件基金会开发。它提供了高性能、可扩展的文本搜索功能,被广泛应用于各种项目和产品中。Lucene 5.2.1是该库的一个重要版本,包含了多项...
通过实例,我们可以创建一个简单的索引器,将文本文件或数据库内容导入Lucene索引,然后编写一个搜索引擎来查询这些内容。这通常涉及以下步骤: - 创建索引:定义Document结构,使用Analyzer处理Field,通过...
在这个实例中,我们将探讨如何在 JDK 1.5 和 Lucene 3.0 的环境下构建和运行一个简单的搜索引擎。 首先,Lucene 的核心概念包括文档(Document)、字段(Field)、索引(Index)和搜索(Search)。文档是存储信息的...
**Lucene.NET 实例详解** Lucene.NET 是一个开源全文搜索引擎库,它是 Apache Lucene 的 .NET 版本。在 .NET 平台上,Lucene.NET 提供了强大的文本搜索功能,可以高效地处理大量数据。本文将深入探讨如何利用 ...
**使用Lucene全文检索数据库** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它是Java编写的,能够帮助开发者在各种应用程序中实现强大的全文检索功能。在这个项目中,我们将探讨如何利用Lucene ...
#### 二、Lucene数据库检索流程 根据题目中的描述,“编写对索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的ID”,我们可以将整个过程分为以下几个步骤: ##### 1. ...
本实例将探讨如何结合Lucene和SQL Server数据库来实现高效的索引和搜索功能。 Lucene是一个由Apache软件基金会开发的全文检索库,它提供了一个高级的、可扩展的、基于Java的搜索程序库。Lucene的核心功能包括文档的...
在Lucene 2.0中,这通常涉及读取数据(例如文本文件或数据库记录),然后使用`IndexWriter`将这些数据分词并存储为倒排索引。倒排索引是一种数据结构,允许快速查找包含特定词汇的文档。 2. **配置分析器**:在创建...
总结来说,构建基于数据库的Lucene搜索引擎实例涉及理解Lucene的核心概念,如分词、索引和搜索,并将这些概念应用于实际的数据源,如数据库。通过这种方式,我们可以为用户提供一个高效、准确的搜索体验,让他们能够...