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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma