lunece3.6初识

在手的项目需要用到lunece对系统做一个全文检索的扩展功能,组里没有人用过这个玩意,不知怎么就把这个任务发给我了。没办法网上查资料学习呗。

一 第一个索引实例

网上很多实例,找了一个照着写了一个程序运行看了下,代码如下


实例一

<pre name="code" class="java">package nis.com.mytest;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class LuceneTest {

	public static void main(String[] args) throws IOException, ParseException {
		FSDirectory directory = FSDirectory.open(new File(
				"D:\\index"));
		//RAMDirectory directory = new RAMDirectory();
		IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36,
				new StandardAnalyzer(Version.LUCENE_36));
		
		IndexWriter writer = new IndexWriter(directory, config);

		Document doc = new Document();
		doc.add(new Field("name", "历史表12", Field.Store.YES,
				Field.Index.ANALYZED));
		writer.addDocument(doc);
		writer.close();

		IndexReader reader = IndexReader.open(directory);

		IndexSearcher searcher = new IndexSearcher(reader);
		
		FuzzyQuery query = new FuzzyQuery(new Term("name", "历"));
		TopDocs rs = searcher.search(query, null, 10);
		System.out.println(rs.totalHits);

		ScoreDoc[] docs = rs.scoreDocs;
		for (int i = 0; i < docs.length; i++) {
			Document docu = searcher.doc(docs[i].doc);

			System.out.println(docu.get("name"));
		}
	}
}


 运行后输出为 
1
历史表12

初步理解代码,首先你需要一个目录来存放生成的索引文件 即 FSDirectory directory = FSDirectory.open(new File( "D:\\index")); ,然后就是生成索引的实现了 ,

需要用到IndexWriter类来实现索引文件的输出,生成索引的基本元素可以看成Document类,每个索引由多个doc组成(ps:有关doc和field在第二部分写出个人理解)。


然后就是读取索引文件进行检索,获取想要的结果。IndexReader类实现对索引文件加载读取的功能,将读取的内容放到IndexSearcher中封装成一个查询的

表(这里用表可能不对,个人感觉和数据库类似,斗胆使用)。FuzzyQuery可以看成是查询的语句,对表进行检索,返回结果集。


代码的大致功能如上所述。下面就对代码中的一些使用的类做一些解释,大部分来源于网络资源,自己收集了一下。

二 lunece创建及检索常用的类解释


Directory类(声明存放索引的位置)

个人使用过的有两个分别是代码中的FSDirectory和RAMDirectory,前者将索引写入文件,后者将索引写入内存(详见实例一注释部分)。

IndexWriterConfig类(IndexWriter类进行一些配置

代码中配置了版本和分词器。

Analyzer类(分词器的祖宗)

实例一种使用的是StandardAnalyzer分词器,这个也是最常用的的分词器,分词器的作用就是讲一段文字分成一个个Token单元,

便于检索使用。

IndexWriter类(将需要索引的文件或内容进行索引处理)

通过使用indexWriterConfig进行配置,将内存中构造的document对象写入文件。

IndexReader类(读取索引文件,供检索使用)

IndexSearcher类(对读取的内容进行封装,使之可以进行检索)

通过search方法对索引进行检索,返回检索结果。

Query类(查询,类似sql语句,通过indexSearcher使用获取返回结果)

有关各类分词器的使用及区别,见文章http://blog.csdn.net/chaocy/article/details/5938741。

各类搜索方法的文章 http://www.iteye.com/topic/569358

lunece内部的一些基本元素理解 http://blog.csdn.net/wxwzy738/article/details/8098712

3.6版本的token获取方法 http://blog.csdn.net/hiphopmattshi/article/details/7226326

上面文章看完,基本可以实现较简单的lunece开发,本人觉得用处很大,在这里标记一下。

基本解释如上,更深层次的可以阅读lunece提供的文档,或者根据问题自行百度。这篇文章基本就是重造轮子,纯属个人的笔记吧,如有误,谅解。。。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值