Lucene连接数据库进行全文搜索初探(一)

Lucene是一个Java全文索引引擎工具包,常用于提升全文搜索效率。通过初始化IndexSearcher、构建索引、优化检索等方式,将数据库数据转化为Document对象,实现高效的全文搜索。在实际应用中,Lucene可以降低数据库压力,适用于高访问量但变化少的数据。本文介绍了如何使用Lucene连接数据库进行全文搜索,包括初始化、构建索引、构建Query及处理搜索结果等步骤。
摘要由CSDN通过智能技术生成

Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎,例如:Web论坛Jive,邮件列表HTML归档/浏览/查询系统Eyebrows,包括我们熟悉的Eclipse的全文帮助搜索功能。在实际开发中,因为数据库不是专为全文搜索设计的,所以对于全文搜索,特别是模糊查询类的全文搜索,用Lucene就比数据库的效率有优势的多。对于变化很少,但查询访问量大的数据,将数据库的数据以document形式存在本地,访问的时候不经过数据库,可以减少数据库压力。对于第一个Lucene程序,编写主要分以下几个步骤:

1.初始化Lucene的检索工具IndexSearcher

IndexSearcher是Lucene中最基本的检索工具,所有的检索都会用到IndexSearcher检索工具,但是在使用IndexSearcher之前,还要做一些准备工作,即对检索工具IndexSearcher进行初始化。

初始化IndexSearcher,需要设置索引存放的路径,这样才能让查询器定位索引,用于后面进行搜索。如以下为一个初始化IndexSearcher的过程:(4种方式)

public IndexSearcher(String path) throws IOException {
this(IndexReader.open(path), true);
}

public IndexSearcher(Directory directory) throws IOException {
this(IndexReader.open(directory), true);
}

public IndexSearcher(IndexReader r) {
this(r, false);
}

private IndexSearcher(IndexReader r, boolean closeReader) {
reader = r;
this.closeReader = closeReader;
}

如:Searcher searcher = new IndexSearcher(indexDir);

返回的结果是IndexSearcher类的一个实例,indexDir表示索引文件的存放路径。

2.构建索引器和索引函数

实例化一个构造器:

IndexWriter writer = new IndexWriter("D:/index/", new PanGuAnalyzer(), true);   //索引的存储位置
这个函数有三个参数,分别是:path——索引文件存放路径,a——分词工具,create——true表示建立索引

3.建立索引

将要建立索引的文件构造成一个Document对象,并添加一个域,如:

Document doc = new Document();
doc.Add(new Field("id", item.id.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
这里先解释下三个概念:

1)Field:可以理解成索引文件中一个个的字段块,占用空间按字段长度分配。
2)Store:一个内部类,它是static的,主要为了设置Field的存储属性.

主要有以下几种:

public static final Store COMPRESS = new Store("COMPRESS"); // 在索引中压缩存储Field的值
public static final Store YES = new Store("YES");//在索引中存储Field的值
public static final Store NO = new Store("NO"); // 在索引中不存储Field的值

3.)Index: 通过Index设置索引方式,有以下几种:

public static final Index TOKENIZED = new Index("TOKENIZED"); // 对Field进行索引,同时还要对其进行分词(由Analyzer来管理如何分词)
public static final Index UN_TOKENIZED = new Index("UN_TOKENIZED"); // 对Field进行索引,但不对其进行分词
public static final Index NO_NORMS = new Index("NO_NORMS"); // 对Field进行索引,但是不使用Analyzer

4.优化检索,关闭写入

writer.Optimize(); //添加完所有document,我们对索引进行优化,优化主要是将多个索引文件合并到一个,有利于提高索引速度。 

writer.Close();//随后将writer关闭,这点很重要。
5.开始检索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值