倒排索引(反向索引)

devtools/2024/9/23 2:56:56/

倒排索引(Inverted Index)是搜索引擎和数据库管理系统中常用的一种数据结构,用于快速检索文档集合中的文档。在全文搜索场景中,倒排索引是一种非常高效的手段,因为它能够快速定位到包含特定关键词的所有文档。

1、基本概念

  • 正向索引:在传统的文档存储中,文档是按其ID或创建时间等属性组织的。如果通过这种方式来查找包含特定关键词的所有文档,则效率较低。

  • 倒排索引:与正向索引相反,倒排索引是以“词到文档”的方式存储数据,即对于每个出现在文档中的词,记录下包含该词的所有文档的列表。这使得查询某个词出现在哪些文档中变得非常高效。

2、倒排索引的组成

  1. 词典(Dictionary):包含了所有唯一词汇的列表。

  2. 倒排列表(Posting List):对于词典中的每个词条,倒排列表记录了包含该词条的所有文档的ID(Document ID),以及在这些文档中的位置信息。

例如,我们有以下文档:

  • Doc1: "I love programming"

  • Doc2: "Programming is fun"

  • Doc3: "I love to program"

那么,基于这三个文档构建的倒排索引可能如下所示:

词条倒排列表
I[Doc1, Doc3]
love[Doc1, Doc3]
programming[Doc1, Doc2]
is[Doc2]
fun[Doc2]
to[Doc3]
program[Doc3]

3、工作原理

  1. 构建索引(分词):首先分析文档集合,提取出每个文档中的所有单词,并为这些单词建立索引。每个单词都对应一个文档列表(称为倒排列表),列表中包含该单词在各个文档中的位置信息。

  2. 存储:将构建好的倒排索引存储起来,通常会进行优化以减少存储空间并加快检索速度,比如使用压缩技术或者分级存储策略。

  3. 查询处理:当用户输入查询词时,系统会在倒排索引中查找对应的文档列表,并根据一定的排序规则返回结果给用户。排序规则可能包括相关性评分、文档排名等因素。

4、应用场景

  • 搜索引擎:Google、Bing等搜索引擎使用倒排索引来加速对网页内容的搜索。

  • 数据库:某些数据库管理系统也会使用类似的概念来提高查询性能。

  • 自然语言处理:在文本挖掘、信息检索等领域也有广泛应用。

5、在Elasticsearch中的应用

在Elasticsearch中,倒排索引的概念被广泛应用于全文搜索功能。Elasticsearch内部自动为文本字段构建倒排索引,以便于高效地处理搜索请求。

5.1 Elasticsearch中的倒排索引特点

  1. 分词器(Analyzer):Elasticsearch允许用户配置不同的分析器来对文本进行分词和标准化处理,从而影响倒排索引的构建。ik_max_word分词器: 最细粒度拆分,ik_smart分词器: 粗粒度的拆分

  2. 动态映射:Elasticsearch可以根据索引的数据动态地生成映射,确定哪些字段应该被索引。

  3. 索引优化:Elasticsearch会定期合并小文件,减少磁盘碎片,提高搜索性能。

  4. 搜索增强:Elasticsearch支持多种搜索方式,比如前缀搜索、模糊搜索等,这些都是基于倒排索引来实现的。

5.2 创建倒排索引的例子

在Elasticsearch中,可以通过定义字段的analyzer属性来指定如何对文本进行分析,从而决定倒排索引的具体构建方式。例如,使用ik_max_word分析器来进行中文分词:

PUT /shop
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"type": "ik_max_word"}}}},"mappings": {"properties": {"title": {"type": "text","analyzer": "my_analyzer"},"content": {"type": "text","analyzer": "my_analyzer"},"price": {"type": "float"},"stock": {"type": "integer"}}}
}

5.3 验证

首先,确保你的映射已经被正确设置,并且索引已经被创建。可以通过以下命令来查看索引的映射:

确保文档已经被正确插入到了索引中,通过之前的批量插入命令来插入文档,或者单独插入文档来验证:

现在,可以尝试搜索文档来验证倒排索引是否正常工作。例如,可以搜索包含“小米手机”的文档:

检查倒排索引的状态,可以使用_stats API来获取索引的状态信息,包括倒排索引的大小和其他统计信息:


http://www.ppmy.cn/devtools/115772.html

相关文章

java-----Stream流

什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等 Stream流的作用: 结合了Lambda表达式,简化集合、数组的操作 Stream流的使用步骤: ①先得到一条…

智能工作伙伴:AI助理与企业知识库的深度融合

在数字化转型的浪潮中,企业正以前所未有的速度探索着提升效率、优化管理、加速创新的途径。AI助理与企业知识库的深度融合,作为这一探索过程中的璀璨明珠,正逐步成为未来工作场所中不可或缺的智能伙伴。本文将深入探讨AI助理与企业知识库在未…

116页可编辑PPT全面了解数据治理体系、平台,数据质量数据标准

概览 《行业大数据治理平台》是一个全面深入探讨大数据治理的PPT文档,共116页,涵盖了建设背景、解决方案、核心功能以及实际应用案例等多个方面。 核心议题 数据作为资产的重要性和全生命周期管理。信息系统建设方案的演变及其面临的问题。数据资产运营…

3. 什么是连接池?为什么使用数据库连接池?

连接池(Connection Pool) 是一种数据库连接管理技术,用于在应用程序和数据库之间管理数据库连接。连接池通过预先创建和维护一定数量的数据库连接,将这些连接放入一个“池”中,供应用程序重复使用。这种方法避免了频繁…

Google 扩展 Chrome 安全和隐私功能

过去一周,谷歌一直在推出新特性和功能,旨在让用户在 Chrome 上的桌面体验更加安全,最新的举措是扩展在多个设备上保存密钥的功能。 到目前为止,Chrome 网络用户只能将密钥保存到 Android 上的 Google 密码管理器,然后…

MySQL之复合查询与内外连接

目录 一:基本查询 二:多表查询 三:自连接 四:子查询 1.单行子查询 2.多行子查询 3 多列子查询 4.在from子句中使用子查询 5. 合并查询 五:表的内外连接 1.内连接 2.外连接 一:基本查询 (1)查询工资高于500或岗位为MANAGER的雇员…

ChatGPT 在国内使用的方法

AI如今很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,ChatGPT 真是无所不能~ 作为一款出色的大语言模型,ChatGPT 实现了人类般的对话交流,最主要是能根据上下文进行互动。 接下来,我将介绍 ChatGPT 在国…

Spark处理结构化数据:DataFrame、DataSet、SparkSQL

Spark处理结构化数据:DataFrame、DataSet、SparkSQL 1. DataFrame: 表示分布式数据集合,以表格的形式存储数据,具有行和列。 支持丰富的操作和转换(如过滤、选择、聚合等)。 提供了对数据的高级抽象,简化了…