当前位置: 首页 > article >正文

ElasticSearch--倒排索引

1.ElasticSearch介绍     

        Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基 于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布, 是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速, 安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他 语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是 Apache Solr,也是基于Lucene

演示:京东,淘宝

Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。

官网地址: https:// lucene.apache.org/

2.倒排索引 

        倒排索引主要是一种用于全文搜索的数据结构,它将文档中的每个单词映射到包含该单词的所有文档的列表中,然后用该列表替换单词。因此,倒排索引在文本搜索和信息检索中广泛应用,如搜索引擎、网站搜索、文本分类等场景中。

        一个倒排索引包含一个词语词典和每个词语对应的倒排列表。倒排列表中记录了包含该词语的所有文档的编号、词频等信息。能让我们能够在O(1)的时间内判断某个文档是否包含某个词,而且还可以基于词频、相关度等统计信息进行搜索结果排序。

举例说明:

        当我们输入一个关键字“搜索引擎”时,搜索引擎会在倒排索引中查找包含“搜索引擎”这个词语的文档列表,搜索是1,引擎是2,然后返回1,2的文档给用户。这种方式比全文检索要快很多,因为倒排索引搜索的是单个词语,而不是整个文档。

2.1倒排索引中非常重要的概念

词条(term):索引里面最小的存储和查询单元,对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。
词汇表(Vocabulary) :这是一个包含所有不重复词汇的列表,每个词汇都有一个唯一的词汇ID。
倒排列表(Inverted List) :对于每个词汇,倒排列表记录了包含该词汇的文档ID或文档的位置信息。这使得搜索引擎可以快速地找到包含特定词汇的文档。
文档( Document ):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

2.2倒排索引原理

倒排索引是一种反向索引结构,它将文档中的每个词汇映射到它出现的文档或文档的位置。它包括两个主要部分:

  • 词汇表(Vocabulary) :这是一个包含所有不重复词汇的列表,每个词汇都有一个唯一的词汇ID。
  • 倒排列表(Inverted List) :对于每个词汇,倒排列表记录了包含该词汇的文档ID或文档的位置信息。这使得搜索引擎可以快速地找到包含特定词汇的文档。
2.3正排索引与倒排索引


正排索引:传统数据库中的索引方式,根据主键或关键字进行排序,适用于精确查找。例如,图书馆的图书按照书号排序,便于查找特定图书。

倒排索引:根据内容中的单词或短语进行排序,适用于全文检索。倒排索引将文档中的单词与文档ID建立关联,便于快速查找包含特定单词的文档。

2. 4倒排索引的构建过程


(1)分词:将文档内容拆分成单词或短语,去除停用词(如“的”、“和”等)。

(2)建立单词词典:将分词后的单词进行排序,去重,形成单词词典。

(3)倒排列表:为每个单词建立倒排列表,记录包含该单词的文档ID及单词在文档中的位置。

(4)索引压缩:对倒排列表进行压缩,减少存储空间。

2.5 检索过程

(1)用户输入一个词语,系统首先对查询进行预处理,包括分词、词干提取等,以便与倒排索引中的词项进行匹配。
(2)系统根据预处理后的查询词项,在倒排索引中查找每个词项对应的文档列表。
(3)如果查询中有多个词项,系统将合并这些词项的倒排列表,找出它们的交集或并集,得到包含所有查询词项的文档集合。
(4)根据每个文档在倒排列表中的相关性得分(如文档频率、位置信息等),对搜索结果进行排序。

2.6 倒排索引的优势和特点
  • 高效的文本搜索:由于倒排索引通过单词快速定位到含有该单词的文档,所以搜索效率非常高。与传统的全文搜索方式相比,倒排索引不需要对每个文档进行扫描,因此可以在大型数据集上快速进行搜索。
  • 支持高级搜索功能:倒排索引可以使用词间关系、词条权重等信息对搜索结果进行精确匹配、布尔运算和相关度排序。
  • 灵活的扩展性:倒排索引支持横向扩展,可以水平分割和复制数据,这样可以轻松地扩大索引容量和提高搜索效率。
  • 支持分词:分词可以将连续字母或数字序列划分为有意义的词组或单个词汇

综上所述,倒排索引是搜索引擎和信息检索领域重要的技术和数据结构,在实现高效、灵活、可扩展和丰富的搜索功能方面有着不可替代的作用。

2.7 倒排索引与正排索引的区别

        正排索引是按照文档编号或文档ID等有序的方式将每个文档存储在索引中,通过文档编号或ID进行检索。这种方式类似于数据库表的行,可以很方便地根据文档ID检索到具体的文档,但是不适合处理大规模文档库的情况。
        倒排索引是按照单词或关键字将文档进行索引,并记录包含该词汇的文档列表。这种方式类似于数据库表的列,可以将具有相同属性的文档按照关键词进行分类,从而实现更加高效和精确的文本搜索。

2.8 倒排索引的应用场景

搜索引擎:如百度、谷歌等,倒排索引是实现快速、准确检索的关键技术。
文本挖掘:在文本挖掘、自然语言处理等领域,倒排索引有助于快速查找相关文档。
数据库:部分数据库系统(如Elasticsearch)采用倒排索引进行全文检索。
 

在实际应用中,正排索引和倒排索引往往是结合使用的。例如,在数据库系统中,正排索引用于快速访问数据记录,而倒排索引用于实现高效的文本搜索。在搜索引擎中,倒排索引用于处理用户的搜索查询,快速返回相关结果,而正排索引则用于获取结果中文档的详细信息。

总结来说,正排索引和倒排索引各有特点,它们在不同的场景下发挥着重要的作用。正排索引适合于基于唯一标识符的数据检索,而倒排索引则更适合于全文搜索和关键词检索。

2.9 mysql与elasticsearch

是不是说,我们学习了elasticsearch就不再需要mysql了呢?

并不是如此,两者各自有自己的擅长支出:

  • Mysql:擅长事务类型操作,可以确保数据的安全和一致性
  • Elasticsearch:擅长海量数据的搜索、分析、计算

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作,使用mysql实现
  • 对查询性能要求较高的搜索需求,使用elasticsearch实现
  • 两者再基于某种方式,实现数据的同步,保证一致性 

http://www.kler.cn/news/290345.html

相关文章:

  • linux~~目录结构远程登录教程(xshell+xftp)
  • [数据集][目标检测]机油泄漏检测数据集VOC+YOLO格式43张1类别
  • Java并发线程 共享模型之管程 5
  • C#中的连接池以及sqlCommand.ExecuteNonQuery()
  • 【Redis】Redis 典型应⽤ - 缓存 (cache)
  • el-table利用折叠面板 type=“expand“ 嵌套el-table,并实现 明细数据多选,选中明细数据后返回原数据得嵌套格式
  • 经验笔记:持续集成/持续部署(CI/CD)流程
  • 基本滤波器响应(低通+高通+带通+带阻)+滤波器的响应特性(阻尼系数+截止频率下降率)
  • k8s集群的调度
  • kubeadm方式安装k8s
  • iomuxc、pinctrl子系统、gpio子系统(学习总结)
  • 使用命令行编译cces工程(Blackfin 或 SHARC)
  • 如何在国内下载llama模型
  • Go入门:gin框架极速搭建图书管理系统
  • ubuntu24安装cuda和cudnn
  • 图像缩放操作
  • go-gin响应被覆盖为400,即使正常返回
  • 向对象八股文(长期跟新_整理收集_排版未优化_day04_20个)
  • IEC61968标准是什么?
  • 《Java面试题集中营》- Redis
  • OceanBase block_file与log过大 的问题
  • 污点、容忍和数据卷
  • 将x减到零的最小操作数问题
  • 应用层(Web与HTTP)
  • 什么是CAPTCHA?工作原理详解与应对方案
  • git 常用基础命令
  • 【MeterSphere】vnc连接不上selenium-chrome容器
  • 编译原理项目——C++实现C语言编译器输出为8086级汇编(代码/报告材料)
  • vue的侦听器、表单输入绑定、模版引用
  • Redis过期键监听