传智播客搜索引擎lucene学习,lucene搜索引擎的使用步骤

2024-04-26 07:32

本文主要是介绍传智播客搜索引擎lucene学习,lucene搜索引擎的使用步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    今天学习lucene搜索引擎,汤老师举例讲解了lucene搜索引擎的搜索原理,创建,删除,更新和使用。汤老师通过对lucene的讲解也讲了一个学习方法,或者说编程思想。就是无需对lucene研究的太深,只需记住它的实现原理和几个重要的类,用的时候哪里不清楚可以查文档,达到这个水平就行了。这种思想其实会贯以后的学习,因为java基础的东西就那些,以后的学习就是不断的学习第三方提供的jar工具包。
    lucene不是一个现成的程序,类似文件搜索程序或web网络爬行器或是一个网站的搜索引擎。Lucene是一个软件库,一个开发工具包,而不是一个具有完整特征的搜索应用程序。它本身只关注文本的索引和搜索。Lucene使你可以为你的应用程
序添加索引和搜索能力。
目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 HTML 文档,PDF 文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene 进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使 Lucene 能够几乎适用于所有的搜索应用程序。

    索引是现代搜索引擎的核心,建立索引的过程就是把源数据处理成非常方便查询
的索引文件的过程。为什么索引这么重要呢,试想你现在要在大量的文档中搜索
含有某个关键词的文档,那么如果不建立索引的话你就需要把这些文档顺序的读
入内存,然后检查这个文章中是不是含有要查找的关键词,这样的话就会耗费非
常多的时间,想想搜索引擎可是在毫秒级的时间内查找出要搜索的结果的。这就
是由于建立了索引的原因,你可以把索引想象成这样一种数据结构,他能够使你
快速的随机访问存储在索引中的关键词,进而找到该关键词所关联的文档。
    Lucene 采用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词/短语表,对于这个表中的每个词/短语,都有一个链表描述了
有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候,就能非常快的
得到搜索结果。
文档建立好索引后,就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。

 

lucene搜索引擎的使用
1,准备环境:添加必要的jar包
   lucene-core-2.4.0.jar(核心);
   lucene-analyzers-2.4.0.jar(分词器);
   lucene-highlighter-2.4.0.jar(高亮器);


2,构造IndexWriter。IndexWriter是Lucene用来创建索引的一个核心的类。使用构造方法IndexWriter(Directory d, Analyzer a, MaxFieldLength mfl); 如果索引不存在,就会被创建。

Directory,代表了 Lucene 的索引的存储的位置。这是一个抽象类,常用的有两
个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引位置。第
二个是 RAMDirectory,它表示一个存储在内存当中的索引位置。

Analyzer,在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分
工作就是由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对
不同的语言和应用需要选择适合的 Analyzer。Analyzer 把分词后的内容交给
IndexWriter 来建立索引。

MaxFieldLength,用于限制Field的大小。这个变量可以让用户有计划地对大文档
Field进行截取。假如取值为10000,就只索引每个Field的前10000个Term(关键
字)。也就是说每个Field中只有前10000个Term(关键字)建立索引,除此之外
的部分都不会被Lucene索引,当然也不能被搜索到。


3,创建索引,使用方法IndexWriter.addDocument(Document doc)。

Document,是用来描述Lucene文档结构的。任何需要进行索引的数据都必须转化成Document对象。Document是索引和搜索的最基本单元,是一组Field的集合。

Field,组成Document的元素,用来描述一个文档的某个属性的,比如一封电子邮
件的标题和内容可以用两个Field对象分别描述。Field是由name和value组成的,
value只接受字符串(非字符串类型要先转换成字符串才行)。在构造Field时还
要指定Store和Index。

Field.Store,指定Field是否或怎样存储。
Store.NO,不存储。
Store.YES,存储。
Store.COMPRESS,压缩后存储(数据量很大的时候可以使用,但要考虑效率)。

Field.Index,指定Field是否或怎么被索引。
Index.NO,不索引(不索引就不能被搜索到)。
Index.ANALYZED,(以前版本中为TOKENIZED),分词后索引。
Index.NOT_ANALYZED,(以前版本中为UN_TOKENIZED),不分词,直接索引(
把整个Field做为一个term)。

当完成了索引操作后,一定要调用IndexWriter.close()方法。


4,删除索引,IndexWriter.deleteDocuments(Term term);会删除索引文件里含有指定Term的所有Document。

Term,是搜索的基本单位。代表某个Field中出现的某个关键字。 


5,更新索引,IndexWriter.updateDocument(Term term, Document doc)。实际上是先删除再创建索引,就是说如果有多条符合条件的Document,更新后只有一条。


6,搜索,使用类IndexSearcher。
查询方法为IndexSearcher.search(Query, Filter, int);
Query,查询对象,把用户输入的查询字符串封装成Lucene能够识别的Query。
Filter,用来过虑搜索结果。
第三个参数(int类型),最多返回的Document的数量。
返回的是一个TopDocs类型,调用TopDocs.scoreDocs得到查询结果。

ScoreDoc.doc返回文档的内部编号。
IndexSearcher.doc(hits[i].doc) 通过编号,拿到文档。

Query可以用QueryParser解析查询字符串生成。使用构造方法为
QueryParser(String defaultFieldName, Analyzer a),第一个参数为默认查询
的Field,第二个参数为使用的分词器(这里用的分词器要和建立索引时用的分词
器一致,否则可能会搜索不到结果)。使用parse(String)方法解析查询内容。


7,编写一个类添加lucene索引的增删改查方法,并编写它的测试类,测试索引的增

删改查。

这篇关于传智播客搜索引擎lucene学习,lucene搜索引擎的使用步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936960

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹