`

【笔记】lucene学习笔记1(基于4.7.2学习)

 
阅读更多

本文来自:fair-jm.iteye.com 转截请注明出处

 

学习的材料是北风网的课程:

写道
基于Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发从无到有垂直搜索引擎
http://www.ibeifeng.com/goods-378.html

 代码是边看视频边自己码的 不知道是否侵权 如有侵权请告知 会立即删除

 

lucene的版本更新也挺快的 这套视频我刚买的时候还是4.6.0 昨天看到lucene那已经到4.7.2了

于是用4.7.2做为学习的版本

 

索引的建立和读取

主要是两个类

 

IndexWriter和IndexReader

最初的demo也是根据这两个类展开

 

IndexWriter的构造方法如下:

IndexWriter(Directory d, IndexWriterConfig conf)
Constructs a new IndexWriter per the settings given in conf.

 需要一个Directory和IndexWriterConfig对象作为参数

其中Directory表示索引存放的路径

IndexWriter包含使用lucene版本(lucene各版本不兼容)和Analyzer(分词器)

代码如下:

//使用标准分词器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
//使用FSDirectory的open方法打开磁盘上的目录
Directory dir = FSDirectory.open(indexPath.toFile());
//设置IndexWriterConfig
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47,
					analyzer);

 

得到IndexWriter 需要写入Document对象 Document对象内有很多的Field

也就是将Field填入Document对象 再由IndexWriter写入到磁盘内

代码如下:

			try (IndexWriter iw = new IndexWriter(dir, config)) {
				Document doc = new Document();

				// id:1 title:key1 key2 content:key3 key4
				// StringField不分词 查询时要输入完整的查询 例如输入 key1 就不会得到结果
				// TextField是分词的 查询词输入 key3或者key4会得到结果 但是输入key3 key4就不会得到结果了
				IndexableField idField = new IntField("id", 1, Field.Store.YES);
				IndexableField titleField = new StringField("title",
						"key1 key2", Field.Store.YES);
				IndexableField contentField = new TextField("content",
						"key3 key4", Field.Store.YES);

				doc.add(idField);
				doc.add(titleField);
				doc.add(contentField);

				iw.addDocument(doc);

				iw.commit();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

 简单的索引建立就完成了(以上代码花括号不配对是中间截了一下 try没截取 代码中的try是try-with-resources)

 

 然后是通过索引获取内容

 需要IndexReader对象 可以通过DirectoryRedaer.open方法得到(传入的参数是放索引的目录)

 然后通过IndexSearch传入Query对象参数进行查询 查询得到TopDocs的对象 再进一步得到document的id

 将id传入IndexReader的document方法后获得具体的Document对象(好绕啊有没有.....)

 最后通过Document对象的get方法传入key 得到value(我所说的key就是上面代码中IndexabelField的第一个 参数)

看具体代码:

	public static void searcherDemo(Path indexPath) {
		try {
			Directory dir = FSDirectory.open(indexPath.toFile());
			try (IndexReader reader = DirectoryReader.open(dir)) {
				IndexSearcher search = new IndexSearcher(reader);
				
			    Query query = new TermQuery(new Term("content", "key3 key4")); //这样查询不到  因为TextField是进行分词的
//				Query query = NumericRangeQuery.newIntRange("id", 1, 1, true,true);
				TopDocs topDocs = search.search(query, 10);

				int hits = topDocs.totalHits;
				System.out.println("hits:" + hits);
				ScoreDoc[] scoreDocs = topDocs.scoreDocs;
				for (ScoreDoc sd : scoreDocs) {
					int docId = sd.doc;
					Document doc = reader.document(docId);
					System.out.println(doc.get("id") + ":" + doc.get("title")
							+ ":" + doc.get("content"));
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 

简单记录一下笔记和代码~需要完整教程的可以购买北风网的视频(我可不是打广告喂....

 

 

 

0
0
分享到:
评论

相关推荐

    lucene学习lucene学习

    lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...

    lucene 4.7.2 Demo

    lucene 4.7.2支持java 6 ,之后的版本需要java 7以上,创建、删除、修改索引,搜索支持通用对象(可以根据对象类型搜索),可以范围搜索、排序、高亮,希望有所帮助

    本人的Lucene2.9学习笔记

    本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记

    lucene使用总结笔记

    lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子...

    Lucene 3.6 学习笔记

    (2) 扩展基于数字和日期的查询 45 (3) 自定义QueryParser效果测试 46 5.5 自定义过滤器 49 (1) 分析需求,创建接口 49 (2) 创建过滤器,继承Filter 50 (3) 实现接口,效果演示 52 第六章 LUCENE扩展 54 6.1 Luke 54 ...

    lucene学习笔记

    lucene学习笔记,lucene入门必备材料

    Lucene学习笔记.doc

    很好的Lucene学习入门资料。lucene是纯java开发的,支持索引的建立和搜索

    Lucene 学习笔记 1

    NULL 博文链接:https://menglh.iteye.com/blog/347467

    lucene基础学习笔记&源码

    lucene基础学习笔记&源码

    lucene学习

    1、案例分析:什么是全文检索,如何实现全文检索 2、Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3、配置开发环境 4、创建索引库 5、查询索引库 6、分析器的分析过程 a) 测试分析器的分词效果 b) 第三方中文...

    基于lucene的开发JavaEE项目

    基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目

    Lucene学习笔记(一)Lucene入门实例

    NULL 博文链接:https://kylinsoong.iteye.com/blog/719415

    基于lucene和nutch的开源搜索引擎资料集合

    Lucene学习笔记.doc nutch_tutorial.pdf nutch二次开发总结.txt nutch入门.pdf nutch入门学习.pdf Nutch全文搜索学习笔记.doc Yahoo的Hadoop教程.doc [硕士论文]_基于Lucene的Web搜索引擎实现.pdf [硕士论文]_基于...

    Lucene学习源码.rar

    Lucene学习源码.rar

    Lucene的的学习资料及案例

    Lucene的的学习资料及案例,包括一个lucene的学习资料总结。供大家学习使用,也有本人写的一个小案例。

    基于Lucene的搜索引擎的研究与应用

    基于Lucene的搜索引擎的研究与应用基于Lucene的搜索引擎的研究与应用

Global site tag (gtag.js) - Google Analytics