当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播

小鸟飞

拥有积分:3
这家伙太懒,还没有签名!

博客分类

笔记中心

课题中心

提问中心

答题中心

解答题中心

Lucene知识小总结6:搜索

小鸟飞 发表于 2年前 (2014-09-26 11:58:54)  |  评论(2)  |  阅读次数(777)| 1 人收藏此文章,   我要收藏   

建好索引之后必定是进行搜索的节奏了,lucene关于搜索这部分内容是包含很多知识的,这里只是一个梗概,因为作为知识点的小梳理,没有探讨高级的知识点,都是先对知识有个小印象,之后慢慢学习吧。

1、搜索操作

public void search01() {
		try {
			IndexReader reader = IndexReader.open(directory);
			IndexSearcher searcher = new IndexSearcher(reader);
			TermQuery query = new TermQuery(new Term("email","test0@test.com"));
			TopDocs tds = searcher.search(query, 10);
			for(ScoreDoc sd:tds.scoreDocs) {
				Document doc = searcher.doc(sd.doc);
				System.out.println("("+sd.doc+"-"+doc.getBoost()+"-"+sd.score+")"+
						doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+
						doc.get("attach")+","+doc.get("date")+","+doc.getValues("email")[1]);
			}
			reader.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void search02() {
		try {
			IndexSearcher searcher = getSearcher();
			TermQuery query = new TermQuery(new Term("content","like"));
			TopDocs tds = searcher.search(query, 10);
			for(ScoreDoc sd:tds.scoreDocs) {
				Document doc = searcher.doc(sd.doc);
				System.out.println(doc.get("id")+"---->"+
						doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+
						doc.get("attach")+","+doc.get("date")+","+doc.getValues("email")[1]);
			}
			searcher.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

2、操作结果截图

3、TopDocs、ScoreDoc这个家伙是干什么的呢?
(以下摘自《Lucene 实战》)

当你查询lucene索引时,它将返回一个包含有序的ScoreDoc对象数组的TopDocs对象。在输入查询后,Lucene会为每个文档计算评分(用以表示相关性的数值)。ScoreDoc对象自身并不会进行实际文档的匹配操作,而是由程序通过整型文档id来进行匹配的。在大多数展现搜索结果的应用程序中,用户只会访问最靠前的几个文档,因此我们没有必要提供对所有搜索结果文档的检索。【即searcher.doc(sd.doc)才是真正加载文档】

4、接下来Debug一下代码,看看这两个家伙到底里面藏了什么东东

(注:本人是小白中的战斗机,下面内容老手见到必定唾沫横飞,非小白者自动躲离)

我在search02进行断点,这个返回的结果较多,可能更好的观察

以上,大概知道lucene搜索的大概流程,当然这仅仅是小屁程序,但是了解大概接着学下去也不会那么一头雾水了,慢慢学习积累吧,借此勉励一下自己


分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183