lucene入门(一)

Lucene全文检索实践
本文介绍了Lucene全文检索引擎工具包的基本概念,并通过实例演示如何使用Lucene进行索引创建和搜索。Lucene是一个开放源代码的全文检索引擎工具包,提供了一套完整的查询引擎和索引引擎。

最近开始对全文检索比较感兴趣了,所以就了解了一下lucene框架,发现上手还是很简单的,也很容易理解。

个人使用lucene只是做了一下基础的实践,主要是为了理解这个全文检索框架。

首先,借用百度百科的一段话介绍一下这个框架:

  Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。

 

了解了lucene之后,为了更加理解很更快的上手,最好需要了解一下他的原理。

lucene做全文检索是主要是分为两大部分:

  第一是建立索引;

  第二是搜索索引。

总之,就是围绕着索引来进行的。作为入门程序,我选择的是先理解lucene的创建索引过程,我个人的理解,创建索引主要是分为四个过程:创建IndexWrite、添加Document、写入Document、关闭IndexWrite

看代码:

private static IndexWriter writer;
	
	static{
		try {
			writer = new IndexWriter(getDirectory(), getIndexWriterConfig());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private static Directory getDirectory() throws IOException{
		return FSDirectory.open(Paths.get(SysConstant.LUCENE_INDEX_DIR));
	}
	
	private static IndexWriterConfig getIndexWriterConfig(){
		return new IndexWriterConfig(new StandardAnalyzer());
	}
	
	/**
     * @Title: createIndex  
     * @Description: 创建索引
     * @param @param datas 需要索引的参数
     * @param @throws IOException    参数  
     * @return void    返回类型  
     * @throws
	 */
	public static void createIndex(List<Map<String ,Object>> datas) throws IOException{
		for(Map<String ,Object> data : datas){
			Document doc = new Document();
			Set<String> keys = data.keySet();
			for(String key : keys){
				doc.add(new TextField(key, data.get(key).toString(), Field.Store.YES));
			}
			System.err.println("已经添加索引"+doc.get("name"));
			writer.addDocument(doc);
		}
		close();
	}
	
	private static void close() throws IOException{
		writer.commit();
		if(writer != null){
			writer.close();
		}
	}

 注意:我这里创建索引使用的是一个Map作为参数,map的key为Field的name,值为Field的content,这是我个人在项目中使用的一个小技巧。

转载于:https://www.cnblogs.com/advanceBlog/p/9116828.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值