01、全文检索 ------ 反向索引库 与 Lucene 的介绍

news2024/11/15 23:17:55

目录

  • 全文检索 ------ 反向索引库 与 Lucene
    • SQL模糊查询的问题
    • 反向索引库
      • 反向索引库的查询
    • Lucene(全文检索技术)
      • Lucene能做什么
      • Lucene存在的问题
      • Solr 和 Elasticsearch 与 Lucene 的关系

全文检索 ------ 反向索引库 与 Lucene


MySQL一些索引词汇解释


SQL模糊查询的问题


如这条 like 模糊查询的 sql

select * fromwhere description like "%疯狂%"

这种 like 的模糊查询,也没办法通过索引查询。

SQL模糊查询(like)只能逐个、逐个地搜索。比如要查询 description 列是否包含了 “ 疯狂 ” 关键字。当字符串内容较多时,本身就需要花费较多的时间来逐个匹配。

如图:
用like 模糊查询 “疯狂” 两字,需要对每一行的数据都进行两个字符两个字符逐个匹配,如下图,表示对这一行数据的逐个匹配的过程。
在这里插入图片描述

当处理100条记录时,模糊查询的时间开销就是单条记录的处理时间 再乘以100;

当处理千万条记录时,模糊查询的时间开销就是单条记录的处理时间 再乘以千万。


关于使用模糊查询 like 是否会导致索引失效的问题:

用like做查询时,通配符% 放在字段值后面(样子为—>xxx%),进行前缀查询,索引就能使用,

前缀查询的样子abc%,就可以拿a、b、c先去索引树进行匹配,所以索引就可以使用。

如果把通配符%放在字段值最前面来进行后缀查询(样子为—>%xxx),那么索引就会失效。

比如后缀查询的样子是 【%abc】,我们根本不知道%是什么值,也就没办法在索引树进行比对,所以索引就会失效


反向索引库


为了解决 like 模糊查询性能不好的问题,Lucene 做出了一个革命性的创新:先建立反向索引库,再通过反向索引库进行检索。

反向索引库: 需要先对目标内容进行分词,然后以【分好的关键词】为 key 建立索引库,value 保存了该key出现在哪些文档中、出现在文档中哪些位置等信息。


解释如图:

原先有这么一张表,这个表里面有一些数据,然后通过分关键词来建立一个索引库。

如图:
“spring” 这个关键词,存在旧表中 id=1 的那一行数据里面,那么在新建立的索引库里面对该关键字给标识上 1;
“强大” 这个关键词,在旧表 id =1 和 id=2 那两行数据里面都存在,那么在新建立的索引库里面也标识了该id,标识了 1,2;
如果我们要全文检索 “强大” 这个词,那么就会直接去旧表查id=1 和 id=2 这两行数据。
而不用对整张表的每一行数据都查一次。
在这里插入图片描述

相当于把 like 的查询策略给去掉了。
对反向索引库的查询,立即就变成了原来的 = 查询,相当于如下条件:
“where 关键词列 = 要查询的关键词 ” 查询,而且这关键词列在反向索引库肯定是有索引的(比如btree索引),
这意味着在反向索引库中对该关键词列(就是上图中的key)的检索完全不需要整个表扫描。


反向索引库的查询


对 “关键词”列 执行查询有两个特征:

  1. 不需要使用LIKE模糊查询,性能很好。
  2. "关键词"列本身带有聚簇索引,性能很好。

通过“关键字”列中可以很迅速地找到“疯狂”关键字,一旦找到“疯狂”关键字之后,接下来就可通过它对应的value发现,该关键字出现了1、2两个文档中,还可以发现该关键字在1、2两个文档中的位置……等更多详细信息。


不管哪一种语言,它能支持的“词”是有限的,以英语为例,大部分母语为英语的大学生词汇量大约在3万左右;

类似的,中文的汉字、单词也是有限的。

不管目标文档是百万条也好,是百亿条也好,反向索引库的关键字并不会显著增加,

因此对“关键词”列的检索性能总是有保证的。



Lucene(全文检索技术)

Lucene 利用了反向索引库的特征,从而为全文检索提供了性能保证。

Lucene 是目前世界上最流行的全文检索框架

Lucene 解决了传统SQL查询搞不定的情况,或者用SQL语句能够搞定查询,但要用到很多LIKE……OR时,查询就会很慢。此时就要用到 Lucene 全文检索技术。



Lucene能做什么


Lucene能开发搜索引擎吗?

实际上这并非不可能,当然单独的Lucene可能做不到,一个互联网搜索引擎至少需要解决以下三个核心问题:

  1. 全文检索。
  2. 海量信息的自动搜索,需要用到网络爬虫从互联网上爬取信息。
  3. 海量信息的分布式存储、管理,例如 Cassandra、MongoDB 等

单独的 Lucene 通常用于实现单个的站内搜索功能,只检索本应用内的信息。


Lucene存在的问题

Lucene本身的API比较难用,Lucene框架的开发者应该不是Java开发者,因此他设计的Lucene API比较晦涩,难用。

最大的问题:Luence 只是一个 Java 框架,因此只有 Java 程序员才能使用 Lucene 为项目添加全文检索功能。此时就需要一个跨平台、跨语言的接口。



Solr 和 Elasticsearch 与 Lucene 的关系

Solr、Elasticsearch 等技术对 Lucene 进行了包装,包装之后的 Solr、Elasticsearch 不再是简单的框架,更像一个搜索引擎的服务器。

虽然 Solr、Elasticsearch 底层都是基于 Lucene,但它们自己提供了对 Lucene 索引库的操作、管理,开发者不再需要直接面向 Lucene API 编程,而是面向 Solr、Elasticsearch 所提供 RESTful 接口(跨平台、跨语言)来编程,

这意味着开发者不管使用哪种语言,甚至不管他会不会编程,只要他会用工具发送请求(比如 Postman、curl 等),那就能调用 Solr、Elasticsearch 的 RESTful 接口来操作索引库,包括创建索引库、添加、删除文档、执行全文检索……等一切功能。

优势:降低开发者的要求(使用起来更方便)、没有开发语言的限制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1423949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MIMIC-IV-ED数据集介绍

MIMIC-IV-ED v2.2 Abstract MIMIC-IV-ED 是一个大型的免费数据库,记录了2011年至2019年间急诊部门(ED)贝斯以色列女执事医疗中心的入院情况。该数据库包含约425,000个 ED 停留。生命体征,分类信息,药物协调,药物管理和出院诊断是…

android 自定义下拉框

一、 简介: 原生Android 提供的spinner下拉框不怎么方便,样式有点丑。修改起来麻烦,于是就自己动手写了一下拉列表。 实现原理使用的是,popwindow弹框,可实现宽高自定义,下拉列表使用listview. 二、pop弹框…

python爬虫2

1.table 是表格&#xff0c;tr是行&#xff0c;td是列 ul li是无序列标签用的较多&#xff0c;ol li是有序列标签 最基本的结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title> Title </title>…

《区块链简易速速上手小册》第6章:区块链在金融服务领域的应用(2024 最新版)

文章目录 6.1 金融服务中的区块链6.1.1 金融服务中区块链的基础6.1.2 主要案例&#xff1a;跨境支付6.1.3 拓展案例 1&#xff1a;去中心化金融&#xff08;DeFi&#xff09;6.1.4 拓展案例 2&#xff1a;代币化资产 6.2 区块链在支付系统中的作用6.2.1 支付系统中区块链的基础…

2024-02-01 Unity Shader 开发入门4 —— ShaderLab 语法

文章目录 1 材质和 Shader1.1 Unity Shader 和 Shader 的区别1.2 Unity 中的材质和 Shader1.3 创建材质1.4 创建 Shader 2 ShaderLab 的基本结构2.1 什么是 ShaderLab2.2 ShaderLab 的基本结构 3 Shader 名称4 Shader 属性4.1 Shader 属性的作用4.2 Shader 属性的基本语法4.3 数…

飞桨paddlespeech语音唤醒推理C INT8 定点实现

前面的文章&#xff08;飞桨paddlespeech语音唤醒推理C定点实现&#xff09;讲了INT16的定点实现。因为目前商用的语音唤醒方案推理几乎都是INT8的定点实现&#xff0c;于是我又做了INT8的定点实现。 实现前做了一番调研。量化主要包括权重值量化和激活值量化。权重值由于较小且…

操作方法:将 PDF 转换为 Word 文档的 7 种方法

只要您有合适的工具&#xff0c;将 PDF 另存为 Word 文档就是小菜一碟。为了简化 PDF 转 Word 的转换&#xff0c;从而提高工作效率&#xff0c;这篇文章将围绕 Windows、Mac 和在线上的几个免费 PDF 转 Word 转换器&#xff0c;轻松帮助您学习如何将 PDF转换为 Word。 Windows…

AIGC,ChatGPT4 实际需求效办公自动化函数应用

用实际需求来给大家演示一下ChatGPT如何助力办应用。 首先我们来提取年份值 我们将公式复制到表格即可。 接下来进行向下填充。 就得到了所有年份&#xff0c; 接下来我们完成第二个需求&#xff0c;按年份统计销售额。 Prompt&#xff1a;有一个表格C列是年份&#xff0c;D列…

java+springboot电影订票选座及评论网站影评系统ssm+vue

广大观影消费者需要知道自己的空闲时间&#xff0c;在自己可以接受的地理距离范围内&#xff0c;是否有感兴趣的影片可供观看&#xff0c;也需要清楚哪家影院在销售自己需要的电影票&#xff1b;同时手握电影排期及上映信息的电影院的运营者也急需根据消费者的观影需求实时调整…

FFMPEG 之 DXVA2 硬解

一&#xff1a;FFMPEG 支持的硬解方式有很多&#xff1a; DXVA2、D3D11VA、CUDA、QSV、OPENCL、DRM、VAAPI、VDPAU、VIDEOTOOLBOX、MEDIACODEC。 有的支持 Windows 平台&#xff0c;有的支持 linux 平台&#xff0c;有的支持 apple ios 平台&#xff0c;…

Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)

案例代码如下&#xff1a; 非静态的方法虚拟机会自带一个关键字&#xff0c;如下&#xff1a; 但是不能手动出来&#xff0c;它的类型就是当前类&#xff1b; 通过输出this&#xff0c;得到当前s1,s2 的地址&#xff1b; 所以在输出时会有隐藏的this&#xff0c;所以this所指向…

LaTeX 文本对齐:ragged2e 宏包

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

268. Missing Number(丢失的数字)

题目描述 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 问题分析 因为这些数是在[0, n] 范围内的数&#xff0c;我们要是一一标记其是否出现很麻烦&#xff0c;但是我们考虑到如果用所有数的和&#xff0c;减去…

【网络安全|漏洞挖掘】ChatGPT 再曝安全漏洞,被指泄露私密对话

风靡全球的聊天机器人 ChatGPT 近日再次陷入安全风波&#xff0c;被曝泄露用户同机器人的私密对话&#xff0c;其中包含用户名、密码等敏感信息。 ArsTechnica 网站援引其读者提供的截图报道称&#xff0c;ChatGPT 泄露了多段非用户本人的对话内容&#xff0c;包含了大量敏感信…

Web前端入门 - HTML JavaScript Vue

ps&#xff1a;刚开始学习web前端开发&#xff0c;有什么不正确、不标准的内容&#xff0c;欢迎大家指出~ Web简介 90年代初期&#xff0c;Web1.0&#xff0c;静态页面&#xff0c;不和服务器交互&#xff0c;网页三剑客指Dreamweaver、Fireworks、Flash2000年代中期&#xf…

HiveSQL题——数据炸裂和数据合并

目录 一、数据炸裂 0 问题描述 1 数据准备 2 数据分析 3 小结 二、数据合并 0 问题描述 1 数据准备 2 数据分析 3 小结 一、数据炸裂 0 问题描述 如何将字符串1-5,16,11-13,9" 扩展成 "1,2,3,4,5,16,11,12,13,9" 且顺序不变。 1 数据准备 with da…

算法练习-逆波兰表达式求值(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;栈与队列 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c…

能耗在线监测系统在节能管理中的应用

上海安科瑞电气股份有限公司 胡冠楠 咨询家&#xff1a;“Acrelhgn”&#xff0c;了解更多产品资讯 摘要&#xff1a;开展能耗在线监测系统建设&#xff0c;对加强政府部门和企业节能管理中的应用前景&#xff0c;分析系统在能源消费预测分析、能效对标、节能监察、能源精细化…

【Oracle云】OCI DevOps Services 构建自动化流水线 (1) - 基础架构流程 OCI 代码仓库使用

OCI DevOps Services 是 Oracle Cloud Infrastructure (OCI) 提供的一项独立的 CI/CD 服务&#xff0c;旨在支持用户构建自动化的流水线&#xff0c;实现更高效、可靠的软件交付。在本系列的第一篇文章中&#xff0c;我们将深入探讨 OCI DevOps Services 的基础架构流程&#x…

探索设计模式的魅力:精准解读桥接模式-用桥接模式构建可扩展的软件系统

设计模式专栏&#xff1a;http://t.csdnimg.cn/nolNS 目录 一、了解桥接模式&#xff1a;探索抽象和实现的分离 1.1 开-闭原则 1.2 组合/聚合复用原则 1.3 定义 1.4 用意 1.5 基本思想 1.6 组成部分 1.7 桥梁模式的示意性系统的结构图 二、桥接模式的优势&#xff1a…