`

【笔记】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 4.7.2 Demo

    《Lucene 4.7.2 Demo:Java全文搜索引擎的核心技术探索》 Lucene,作为Apache软件基金会的一个开源项目,是Java...通过深入学习和实践,开发者可以充分利用Lucene 4.7.2的特性,提升信息检索系统的性能和用户体验。

    Lucene 学习笔记 1

    **Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...

    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 学习笔记

    【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...

    lucene学习笔记

    标题:Lucene学习笔记 描述:Lucene学习笔记,Lucene入门必备材料 知识点: 一、Lucene概述与文档管理策略 Lucene是一款高性能、全功能的文本搜索引擎库,广泛应用于文档检索、全文搜索等场景。为了提升搜索效率...

    lucene学习资料收集

    1. **全文检索基础**:Lucene的核心功能是实现全文检索,它能够对文本数据进行索引,使得用户可以通过关键词快速找到相关文档。这涉及到分词、词频统计、倒排索引等关键技术。 2. **分词器(Tokenizer)**:Lucene...

    Lucene学习笔记.doc

    【Lucene学习笔记】 Lucene是一个高性能、全文检索的开源库,完全用Java编写,能够帮助开发者在应用程序中实现复杂的搜索引擎功能。它提供了强大的索引和搜索机制,使得从大量文本数据中快速找到相关信息变得简单。...

    lucene3.5学习笔记

    ### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...

    lucene 3.5学习笔记

    《Lucene 3.5 学习笔记》 在信息技术高速发展的今天,搜索引擎技术成为了信息检索的核心工具。Apache Lucene,作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene 3.5版本的相关知识...

    lucene学习

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

    Lucene学习源码.rar

    本文将主要围绕Java Lucene进行深入探讨,并基于提供的“Lucene学习源码.rar”文件中的“Lucene视频教程_讲解部分源码”展开讨论。 一、Lucene核心概念 1. 文档(Document):Lucene中的基本单位,用于存储待检索...

    Lucene的的学习资料及案例

    **Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...

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

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

    Lucene学习笔记

    【Lucene学习笔记】 Lucene 是一款开源的全文检索框架,由Apache软件基金会维护,它提供了高效的、可扩展的搜索引擎功能。不同于一个完整的应用程序,Lucene 提供的是一个基础组件,开发者可以将其集成到自己的应用...

    lucene学习pdf2

    1. **文档模型**:Lucene中的每个文档由多个字段组成,每个字段可以有不同属性,如是否被索引、是否被存储等。 2. **分词器(Tokenizer)**:这是将原始文本拆分成可搜索的词元的过程,不同的分词器适用于不同的...

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

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

    Lucene索引管理器(基于Luke修改而来)

    **Lucene索引管理器(基于Luke修改而来)** Lucene是Apache软件基金会的一个开源全文检索库,它提供了强大的文本搜索功能。而Luke是Lucene的可视化工具,它允许开发者查看和操作Lucene索引,包括文档内容、字段、分词...

Global site tag (gtag.js) - Google Analytics