传智播客搜索引擎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

相关文章

C#中checked关键字的使用小结

《C#中checked关键字的使用小结》本文主要介绍了C#中checked关键字的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录✅ 为什么需要checked? 问题:整数溢出是“静默China编程”的(默认)checked的三种用

C#中预处理器指令的使用小结

《C#中预处理器指令的使用小结》本文主要介绍了C#中预处理器指令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 第 1 名:#if/#else/#elif/#endif✅用途:条件编译(绝对最常用!) 典型场景: 示例

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格