这么说吧,Lucene很简单,其实就是个框架,用于全文检索用的

简介: 我是风月连城,喜欢用简单的语言阐述知识点长期分享原创java文章,分享进阶架构师学习笔记及学习资料喜欢的大屌们可以关注下,共同学习,一起进步ps:由于工资迟迟不发,影响心情,好几天没写文章....Lucene是什么?0 ) 关键词:Lucene ,搜索,全文检索1)本质:一个Jar包,一个用于全文检索的框架2)作用:Lucene不是一个完整的全文索引应用,而是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。

我是风月连城,喜欢用简单的语言阐述知识点

长期分享原创java文章,分享进阶架构师学习笔记及学习资料

喜欢的大屌们可以关注下,共同学习,一起进步


ps:由于工资迟迟不发,影响心情,好几天没写文章....


Lucene是什么?

0 ) 关键词:Lucene ,搜索,全文检索

1)本质:一个Jar包,一个用于全文检索的框架

2)作用:Lucene不是一个完整的全文索引应用,而是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。而数据库执行模糊查询都需要对全表扫描或索引扫描意味着消耗大量IO,如果模糊查询经常发生,会造成数据库性能恶化。

3 ) 好处 :

  1 . 索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。

  2 . 在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。

  3 . 优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。

  4 . 设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。

  5 . 已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search)、分组查询等等。

  6 . 开源,可扩展能力强,有各种语言版本,适合各种平台,

4 ) 场景:基于Lucene框架的搜索引擎有很多,如Solr,Elastic Search,Nutch

5 ) 中文 : 对于中文用户来说,最关心的问题是其是否支持中文的全文检索。但通过后面对于Lucene的结构的介绍,你会了解到由于Lucene良好架构设计,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。

6 ) 主要的包(既然只是个框架,那肯定得介绍里面主要的一些包的作用啦):

7 ) 架构设计(Lucene主要做的两件事):

如图,简单说全文检索大体分两个过程(主要做这两件事),索引创建(Indexing)和 搜索索引(Search)。

一.索引创建入库:文本内容经切词后索引入库 (即通过IndexWriter对不同的文件进行索引的创建,并将其保存在索引相关文件存储的位置中),其入库逻辑大致如下:

  1.入库者定义到库中文档的结构,比如需要把网站内容加载到全文检索库,让用户通过“站内检索”搜索到相关的网页内容。入库文档结构与关系型数据库中的表结构类似,每个入库的文档由多个字段构成,假设这里需要入库的网站内容包括如下字段:文章标题、作者、发布时间、原文链接、正文内容(一般作为网页快照)。

  2. 包含N个字段的文档(DOCUMENT)在真正入库前需要经过切词(或分词)索引,切词的规则由语言分析器(ANALYZER)完成。

  3. 切分后的“单词”被注册到索引树上,供查询时用,另外也需要把其它不需要索引的内容入库,所有这些是文件操作均由STORAGE完成。

  4. Lucene的索引树结构非常优秀,是Lucene的一大特色。

二.搜索索引:就是得到用户的查询请求,搜索所创建的索引,然后返回结果的过程。大致逻辑如下:

  1. 查询者输入查询条件,条件之间可以通过特定运算符进行运算,比如查询希望查询到与“中国”和“北京”相关的记录,但不希望结果中包括“海淀区中关村”,于是输入条件为“中国+北京-海淀区中关村”;

  2. 查询条件被传达到查询分析器中,分析器将将对“中国+北京-海 淀区中关村”进行分析,首先分析器解析字符串的连接符,即这里的加号和减号,然后对每个词进行切词,一般最小的词元是两个汉字,则中国和北京两个词不必再 切分,但对海淀区中关村需要切分,假设根据切词算法,把该词切分为“海淀区”和“中关村”两部分,则最后得到的查询条件可以表示为:“中国” AND “北京” AND NOT(“海淀区” AND “中关村”)。

  3.查询器根据这个条件遍历索引树,得到查询结果,并返回结果集,返回的结果集(类似于JDBC中的ResultSet)

  4. 将返回的结果集显示在查询结果页面

  5.需要注意的是,Lucene默认只支持英文,为了便于说明问题,以上查询过程采用中文举例,事实上,当Lucene被扩充支持中文后就是这么一个查询过程。(各种好用的中文词典分词库大家可以自行百度下)

8 ) 原理 : 在Lucene中,就是使用这种“倒排索引”的技术,来实现相关映射。:

9 ) Demo实例 :没有,就是这么任性.快国庆了工资都没发,吃土中...看到这里的大屌们还不关注下?

相关文章
|
SQL 弹性计算 分布式计算
TiDB计算层详解:分布式计算框架与查询优化机制
【2月更文挑战第26天】本文将深入剖析TiDB的计算层,详细解析其分布式计算框架和查询优化机制。通过了解计算层的核心组件和工作原理,我们可以更好地理解TiDB如何高效处理SQL查询和计算任务。本文将从计算层的架构、任务分发、查询优化等方面展开介绍,帮助读者全面掌握TiDB计算层的关键技术和优势。
|
Ubuntu 安全 Linux
什么是 LTS 长期支持
长期支持(LTS)版本通常与应用程序或操作系统有关,你会在较长的时间内获得安全、维护和(有时有)功能的更新。 LTS 版本被认为是最稳定的版本,它经历了广泛的测试,并且大多包含了多年积累的改进。 需要注意的是,LTS 版本的软件不一定涉及功能更新,除非有一个更新的 LTS 版本。但是,你会在 LTS 版本的更新中得到必要的错误修复和安全修复。
|
调度 C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
|
7月前
|
机器学习/深度学习 自然语言处理 API
RM-Gallery: 一站式奖励模型平台
近年来,大型语言模型(LLMs)发展迅速,比如 ChatGPT、Qwen、Claude、 Llama。这些模型最初的能力来自预训练规模的扩展(pre-training scaling),即通过 “next-token prediction” 的任务,在海量语料上训练,从而获得通用能力。但是面对具体场景,由于场景任务目标不一定和通用能力匹配(比如对齐场景),所以预训练模型表现会有一些不足。为了在预训练之后进一步优化大型语言模型,近年来的研究开始转向训练后和测试时的规模扩展,其中奖励模型起着关键作用。
406 2
|
5月前
|
安全 网络协议 NoSQL
Web渗透-常见的端口及对其的攻击思路
本文介绍了常见网络服务端口及其安全风险,涵盖FTP、SSH、Telnet、SMTP、DNS、HTTP、SMB、数据库及远程桌面等20余个端口,涉及弱口令爆破、信息泄露、未授权访问、缓冲区溢出等典型漏洞,适用于网络安全学习与渗透测试参考。
1146 59
|
IDE JavaScript API
1688寻源通API对接流程以及说明
1688寻源通API(这里主要指的是跨境寻原通数据接口)的对接流程及说明如下:
|
SQL 自然语言处理 数据库
DAIL-SQL: 发掘LLM的NL2SQL能力
最近,DAIL-SQL在魔搭创空间上线,并在NL2SQL任务上取得了新的SOTA。DAIL-SQL可以更好地利用LLM的NL2SQL能力,本文对其进行详细解读。
|
消息中间件 存储 缓存
不看损失大了,刨根问底,Kafka消息中间件到底会不会丢消息
不看损失大了,刨根问底,Kafka消息中间件到底会不会丢消息
1344 87
不看损失大了,刨根问底,Kafka消息中间件到底会不会丢消息
|
运维 Devops jenkins
DevOps实践之路:从自动化部署到持续交付
【7月更文挑战第16天】在当今快速迭代的软件生命周期中,DevOps已经成为提升效率、缩短产品上市时间的关键因素。本文将深入探讨DevOps的核心理念与实践,特别是如何通过自动化工具实现代码的持续集成和部署,以及如何构建有效的持续交付流程。我们将从理论出发,结合实际案例分析,为读者提供一套完整的DevOps落地方案。
|
前端开发 JavaScript Java
美食分享|基于Springboot+Vue实现美食分享网站
美食分享|基于Springboot+Vue实现美食分享网站
1247 0
美食分享|基于Springboot+Vue实现美食分享网站