ElasticSearch 中的倒排索引的概念

ElasticSearch 中可以进行全文索引,而且可以快速的将数据从海量的数据中提取出来, 其中倒排索引是ElasticSearch 中比较核心的处理数据的概念。那么理解倒排序是理解ElasticSearch 快速处理数据的一个关键.

在说倒排索引之前,我们其实应该明白什么是正排索引,这里的索引并非是我们通常理解的传统数据库中 INDEX  的 ASC , DESC 的意思.

正排索引, 是一个数据库结构,一个将文档中的词和文档之间进行关联的功能,

首先他将扫描文档中的所有单词,将单词添加到索引的页面当中,直到将文档中的所有词都遍历一遍,如果在一个文档中,查询某个单词的速度是非常快的,而如果要变为搜索所有文档中的某一个关键词就难了. 文档越多,则查询的速度会越来越慢.

正排序, 每个文档都会扫描出一些关键字, 所以如果在一个文档中找到对应的字是很简单的,快速的, 但反过来,如果要通过"我"字查询到有多少文档有这个字,那就麻烦了文档越多,遍历的时间就越长.

所以在目前的状态下, 查询的效率被挑战, 就必须通过其他的方法来快速查询的设计.

这里就需要另一个方法来进行查询, inverted index 倒排索引,通过将上面的数据存储的结构反过来通过"词" 作为索引的主结构,  通过搜寻文档来获得所有的词,

在搜索文档中的词的时候,如果这个条目在索引的原结构上没有,则创建新的词标签,如果有的情况下,将添加这个词发现的位置到这个词所在的索引列.

在DNS 系统中的, DNS LOOP 可以理解为正排, 而在 DNS 系统中的 

Reverse lookup 就为相关的倒排序.

同时我们还可以在加大利用这个倒排序的方式, 例如加入  文档1 中存在  我字的个数也都添加到倒排序的信息中.   

在建立以关键词为主的索引的过程中,词典结构也会相应地被构建出来。比如在解析一个新文档的时候,对于某个在文档中出现的单词T,首先利用哈希函数获得其哈希值,之后根据哈希值对应的哈希表项读取其中保存的指针,就找到了对应的冲突链表。如果冲突链表里已经存在这个单词,说明单词在之前解析的文档里已经出现过。如果在冲突链表里没有发现这个单词,说明该单词是首次碰到,则将其加入冲突链表里。通过这种方式,当文档集合内所有文档解析完毕时,相应的词典结构也就建立起来了。

通过这样的结构设计,ES 可以承担起全文索引的问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值