首页 > 其他分享 >倒排索引(反向索引)

倒排索引(反向索引)

时间:2024-09-20 21:54:47浏览次数:9  
标签:搜索 倒排 analyzer 索引 文档 反向 Elasticsearch

倒排索引(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来获取索引的状态信息,包括倒排索引的大小和其他统计信息:

标签:搜索,倒排,analyzer,索引,文档,反向,Elasticsearch
From: https://blog.csdn.net/zhzjn/article/details/142405223

相关文章

  • Nginx反向代理出现502 Bad Gateway问题的解决方案
    ......
  • 04-Mysql索引优化实战一
    示例表CREATETABLE`employees`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(24)NOTNULLDEFAULT''COMMENT'姓名',`age`int(11)NOTNULLDEFAULT'0'COMMENT'年龄',`position`varchar(20)NOTNULLDEFAULT......
  • 05-Mysql索引优化实战二
    分页查询优化1示例表:2CREATETABLE`employees`(3 `id`int(11)NOTNULLAUTO_INCREMENT,4 `name`varchar(24)NOTNULLDEFAULT''COMMENT'姓名',5 `age`int(11)NOTNULLDEFAULT'0'COMMENT'年龄',6 `position`varchar(20)NOTNUL......
  • Teamcenter AWC 全文检索 运行生成索引命令无效,处理方法1
    方法:获取当前时间 执行索引命令执行成功,写到properties文件中,下次执行,从上次执行的时间开始importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.LineNumberReader;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Pr......
  • MySQL 中的索引覆盖扫描:加速查询的秘密武器
    在MySQL数据库的使用中,索引是提高查询性能的重要工具。而索引覆盖扫描(IndexCoveringScan)更是一种能显著提升查询效率的技术。本篇文章我们就来深入了解一下MySQL中的索引覆盖扫描是什么。一、什么是索引覆盖扫描在MySQL中,当查询语句所需要的所有列的数据都可以从索引中直......
  • MySQL索引与事务的透析
    MySQL索引与事务的透析MySQL索引与事务的透析1.引言1.1研究背景1.2研究意义2.MySQL数据库概述2.1MySQL的历史与发展2.2MySQL的架构2.3MySQL的特点3.索引的基本概念3.1mysql索引的定义3.2mysql索引类型3.3索引的作用4.索引的内部机制4.1B-Tree索引4.2Has......
  • mysql性能优化(索引)
    mysql大部分性能的问题都出在索引上,因此索引优化是头等大事1.最左匹配原则这是索引基本的匹配原则,这里不多说,只要记住索引是要按顺序创建的,mysql是按顺序去b+树上查找的就行2.Usingtemporary;Usingfilesort往往出现这个都代表着不好的情况,通常是在groupby和orderby的情况下......
  • 正确创建索引,索引何时失效?
    正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下:createtableuser(idbigintnotnullcomment'id'primarykey,namevarchar(200)nullcomment'name',agebigintnullcomment'age......
  • 怎么使用Nginx反向代理Rancher
    环境查看系统环境#cat/etc/redhat-releaseRockyLinuxrelease9.4(BlueOnyx)#uname-a#1SMPPREEMPT_DYNAMICThuSep1218:24:53UTC2024x86_64x86_64x86_64GNU/Linux软件环境#nginx-versionnginxversion:nginx/1.26.2Nginx配置文件已经搭建好R......
  • ES 常用API:创建索引,创建别名,重建索引
    华为云不同版本间索引同步数据(目前华为后台工具不能跨版本间同步数据):ES常用API:创建索引,创建别名,重建索引华为云不同版本间索引同步数据(目前华为后台工具不能跨版本间同步数据):elasticdump--inputhttp://admin:123456@ip:9200/sensitive_1_v15--outputhttp://admin:123123@......