精华内容
下载资源
问答
  • Elasticsearch 使用一种称为 倒排索引 结构,它适用于快速全文搜索。一个倒排索引由文档中所有不重复词列表构成,对于其中每个词,有一个包含它文档列表。 例如,假设我们有两个文档,每个文档 ...

    ElasticSearch汇总请查看:ElasticSearch教程——汇总篇

     

    倒排索引

    Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

    例如,假设我们有两个文档,每个文档的 content 域包含如下内容:

    1. The quick brown fox jumped over the lazy dog
    2. Quick brown foxes leap over lazy dogs in summer

    为了创建倒排索引,我们首先将每个文档的 content 域拆分成单独的 词(我们称它为 词条 或 tokens),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示:

    Term      Doc_1  Doc_2
    -------------------------
    Quick   |       |  X
    The     |   X   |
    brown   |   X   |  X
    dog     |   X   |
    dogs    |       |  X
    fox     |   X   |
    foxes   |       |  X
    in      |       |  X
    jumped  |   X   |
    lazy    |   X   |  X
    leap    |       |  X
    over    |   X   |  X
    quick   |   X   |
    summer  |       |  X
    the     |   X   |
    ------------------------

    现在,如果我们想搜索 quick brown ,我们只需要查找包含每个词条的文档:

    Term      Doc_1  Doc_2
    -------------------------
    brown   |   X   |  X
    quick   |   X   |
    ------------------------
    Total   |   2   |  1

    两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。

    但是,我们目前的倒排索引有一些问题:

    • Quick 和 quick 以独立的词条出现,然而用户可能认为它们是相同的词。
    • fox 和 foxes 非常相似, 就像 dog 和 dogs ;他们有相同的词根。
    • jumped 和 leap, 尽管没有相同的词根,但他们的意思很相近。他们是同义词。

    使用前面的索引搜索 +Quick +fox 不会得到任何匹配文档。(记住,+ 前缀表明这个词必须存在。)只有同时出现 Quick 和 fox 的文档才满足这个查询条件,但是第一个文档包含 quick fox ,第二个文档包含 Quick foxes 。

    我们的用户可以合理的期望两个文档与查询匹配。我们可以做的更好。

    如果我们将词条规范为标准模式,那么我们可以找到与用户搜索的词条不完全一致,但具有足够相关性的文档。例如:

    • Quick 可以小写化为 quick 。
    • foxes 可以 词干提取 --变为词根的格式-- 为 fox 。类似的, dogs 可以为提取为 dog 。
    • jumped 和 leap 是同义词,可以索引为相同的单词 jump 。

    现在索引看上去像这样:

    Term      Doc_1  Doc_2
    -------------------------
    brown   |   X   |  X
    dog     |   X   |  X
    fox     |   X   |  X
    in      |       |  X
    jump    |   X   |  X
    lazy    |   X   |  X
    over    |   X   |  X
    quick   |   X   |  X
    summer  |       |  X
    the     |   X   |  X
    ------------------------

    这还远远不够。我们搜索 +Quick +fox 仍然 会失败,因为在我们的索引中,已经没有 Quick 了。但是,如果我们对搜索的字符串使用与 content 域相同的标准化规则,会变成查询 +quick +fox ,这样两个文档都会匹配!

     

     

    倒排索引结构

    (1)包含这个关键词的document list
    (2)包含这个关键词的所有document的数量:IDF(inverse document frequency)
    (3)这个关键词在每个document中出现的次数:TF(term frequency)
    (4)这个关键词在这个document中的次序
    (5)每个document的长度:length norm
    (6)包含这个关键词的所有document的平均长度
     

     

    倒排索引不可变

    优点

    (1)不需要锁,提升并发能力,避免锁的问题
    (2)数据不变,一直保存在os cache中,只要cache内存足够
    (3)filter cache一直驻留在内存,因为数据不变
    (4)可以压缩,节省cpu和io开销
     

    缺点

    每次都要重新构建整个索引,比较繁琐。

    展开全文
  • 【概述】 倒排表是对次关键码的一种索引表,其...倒排索引的优点在于查找记录的速度很快,有时不用读取记录即可得到结果,而且由于其并未对文件进行修改,使用和维护都比较简单。 但由于倒排表中的记录号表长是...

    【概述】

    倒排表是对次关键码的一种索引表,其索引项包括以下两个结构:

    • 次关键码:要记录的表项
    • 记录号表:存储具有相同次关键字的所有记录的记录号,并且有序排列

    这种索引不是由记录来确定数据项,而是由数据项来确定记录的位置。

    【优缺点】

    倒排索引的优点在于查找记录的速度很快,有时不用读取记录即可得到结果,而且由于其并未对文件进行修改,使用和维护都比较简单。

    但由于倒排表中的记录号表长是不固定的,处理时极不方便,此外,倒排表中具同一关键码值的记录号都是有序序列,这在插入和删除时要进行一定的处理。

    展开全文
  • 所以时间复杂度介于顺序查找和有序查找之间计算分块索引的平均查找长度优缺点倒排索引 inverted index用一个例子讲解名字的由来优缺点记录号表的改进方向 第一篇关于查找的文章介绍了一种最基础的无序查找(顺序查找...

    索引查找广泛用于文件检索,数据库和搜索引擎等领域。

    第一篇关于查找的文章介绍了一种最基础的无序查找(顺序查找,是最基础的也最费时间的查找方法,是海量数据查找表的福音)和三种有序查找,本文继续讲无序查找,因为现实中的很多场景涉及到海量数据,比如服务器的日志信息,论坛的帖子以及回复等,一天百万千万条,对这种大规模大体量的数据基于某个关键字排序的时间代价极为昂贵,所以这类海量数据并不排序,而是直接以时间先后顺序存储。这种情况下,必须设计一种时间复杂度比顺序查找低的无序查找算法。

    这就是本文主角,索引查找索引是个好东西,在计算机科学中广泛使用,尤其是磁盘文件和大型数据库中更加常用。

    本文讲解的很粗浅,深度不够,只是抛砖引玉。现实中应用的搜索技术是非常复杂的,本文这些是最经典最基本的方法,在现实中还需要改善。

    索引:为加快查找速度而设计的一种数据结构

    设计各种数据结构是为了存储数据和提高处理数据的速度(通过存储数据之间的逻辑关系实现)。索引,就是一种为了提快无序查找表中的关键字查找速度,而专门设计的数据结构,但是我们从小到处接触索引,所以它又是特别熟悉的,现在带着更专业的眼光去看待它吧。

    在这里插入图片描述

    按照结构,索引有线性索引,树形索引和多级索引三种。

    本文只介绍了线性索引,即把所有索引项(数据)构成的集合组织为线性结构,所以线性索引又称索引表

    三种线性索引

    稠密索引:索引项一定有序

    在这里插入图片描述
    比如excel表格,生活中的表格数据条目相对较少,不会达到百万千万条,所以基本都使用稠密索引。

    稠密索引的索引项一定是有序的。如下图,因为建立索引的目的是加快查找,只有索引项是有序的(比如下图就是按照关键码的大小给关键码编索引号),才能利用有序查找等,得到快的查找速度。
    在这里插入图片描述

    优缺点

    • 优点:
    • 缺点:空间代价大。索引数目和数据记录数一样多,如果数据集规模很大,比如上亿,那么索引也很大,很占内存。
      分块索引就改善了这个缺点,减少了索引的数目。

    分块索引:数据集分块有序,每一块对应一个索引,块内无序,块间有序

    在这里插入图片描述
    总之,有序需要付出时间和空间的代价,但是可以换来效率。

    例子:

    在这里插入图片描述

    索引项结构

    在这里插入图片描述在这里插入图片描述

    块间有序查找(快)+块内顺序查找(慢):所以时间复杂度介于顺序查找和有序查找之间

    快慢结合,有序和无序结合
    在这里插入图片描述

    计算分块索引的平均查找长度

    假设数据集有n条记录,被平分为m块(计算平均查找长度,所以平分),每块有t个记录。则n=mtn=m*t

    • 查找索引表(即存了索引的线性表,并不是数据集哦)的平均查找长度LbL_b:索引表长度是m,可以有序查找,根据最好(查找长度为1)和最差(查找长度为m)的等概率原则,Lb=m+12L_b=\frac{m+1}{2}
    • 块内查找记录的平均查找长度LwL_w:只能顺序查找,也是考虑等概率原则,所以Lw=t+12L_w=\frac{t+1}{2}
    • 分块索引的平均查找长度
      ASLw=Lb+Lw=t+m2+1=t+nt2+1ASL_w = L_b+L_w=\frac{t+m}{2}+1=\frac{t+\frac{n}{t}}{2}+1

    转换为只依赖块内记录数t和数据记录总数n的式子后,可以看到,当t等于n\sqrt n时,即块内记录数t等于块数m时,平均长度最短(最佳情况),为n+1\sqrt n +1

    优缺点

    • 优点:
    1. 减少了索引数目;
    2. 比纯顺序查找快得多,作为无序查找算是很好了(当然,是结合了有序查找的)。这种块内无序的工作方式,相比于顺序查找,大大提升了查找效率,所以数据库的查找常用分块查找。
    • 缺点:比纯有序查找慢,这个缺点属于鸡蛋里挑骨头啦

    倒排索引 inverted index

    最基础的,最简单的查找算法。

    前阵子看知乎,刷到一个人的面经, 面试官问的就是为什么搜索引擎可以那么快返回给我们搜索结果,当时作者没答出来,后来他才知道,就是倒排索引!!!问题地址懒得找了,知乎上关于搜索引擎比如Google和百度为什么那么快有很多讨论和回答,已经探讨到很深入的地步了,不仅仅是倒排索引算法了,还讲到了分布式数据库和缓存等,自行搜索食用。

    用一个例子讲解

    假设有两篇文章(这里为了举例,每篇文章实际就是一句话),分别放在两个网页

    在这里插入图片描述
    那么搜索引擎就会去把所有文章中的所有单词找出来,然后建立一个下面这样的表
    在这里插入图片描述
    当你在搜索框键入一个单词,比如good时,由于单词是有序存放的,很快可以找到good,也就找到了含有这个单词的文章编号,于是搜索引擎立即把这些文章编号对应的网页排序后返回过来,当然也会返回共找到2条记录。

    就因为提前把文章编号存起来了,存在了索引项里,所以一搜索立刻就返回回去了,是就像为每个问题都早已准备好了答案。
    在这里插入图片描述

    名字的由来

    在这里插入图片描述

    优缺点

    • 优点:查找速度非常快,因为一旦生成索引表,就只需花费在索引表中查找索引项的时间了,直接返回记录号数的的时间都可以忽略。
    • 缺点:
    1. 记录号表不是定长的,因此插入和删除等维护操作比较困难;
    2. 只能告诉我们在哪些文章中出现过,但是无法查找到具体出现的位置。如果要知道具体在哪里出现,还需要进一步改良记录号表

    记录号表的改进方向

    1. 如果文章记录上亿,搜索引擎返回记录号时,不会都返回大的数字,因为太占空间了,而会使用一点压缩技术
      在这里插入图片描述
    2. 中文文章更复杂,比如搜索“中国人”,则“中国”,“国人”都是可能的关键词。
    展开全文
  • lucene的优缺点

    2013-04-23 15:50:00
    (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。 (3)优秀的面向对象的系统架构,使得对于Lucene扩....

    lucene的优缺点:

    (1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。   

    (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。     

    (3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。   

    (4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。      

    (5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。 

    转载于:https://www.cnblogs.com/Dream-Weaver/archive/2013/04/23/3037969.html

    展开全文
  • ABTEST流量切分一般是...配置例子索引结构可对每个定向和test进行倒排索引,即key为定向类型+定向value(或者定向类型和定向直二级索引),doc为test流程,搜到后定向纬度内进行并集,纬度之间进行交集操作(对于bitse...
  • 关键词基本概念索引的优缺点B+树基本结构和操作和B树的区别全文检索倒排索引inverted indexInnoDB全文检索索引关键词重要关键词InnoDB怎么选择聚集索引前缀索引MySQL对索引的几个优化快速索引创建Fast Index ...
  • elasticsearch

    2019-06-21 20:29:16
    倒排索引是实现"单词-文档矩阵"一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词文档列表,倒排索引主要由两个部分组成"单词词典"和倒排文件". ElasticSearch与Solr优缺点对比 当单纯对已有...
  • ElasticSearch中数据结构

    万次阅读 2019-06-03 16:13:31
    本文总结了ElasticSearch中用于性能优化所用到几种数据结构,如用于压缩倒排索引内存存储空间FST,用于查询条件合并SkipList以及用于提高范围查找效率BKDTree,对这几种数据结构在Lucene中使用进行了详细...
  • 什么事倒排索引优缺点1.3 ElasticSearch,JAVA如何访问,如何作为Spring Boot数据库? 说明,感谢亮哥长期对我帮助,此处多篇文章均为亮哥带我整理。以及参考诸多博主文章。如果侵权,请及时指出,我会立马...
  • 深入分片原理 ... 为了保证文档可以被搜索到,ES采用了倒排索引的模式,详细的原理请参照:ES原理 写入磁盘的倒排索引是不可变的,它的优缺点 优点: 1、不需要锁,因为不可变就没有更新。 2、一但...
  • Elasticsearch简单介绍 Elasticsearch是大数据家族非常重要一员, 有着强大...1,基于lucene,使用倒排索引,有非常强大数据搜索能力.能快速从海量数据中抓取敏感数据 2,默认dsl表达能力非常强大,灵活性非常高 3...
  • 倒排索引,顾名思义,它相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成——词典和倒排表。  其中词典结构尤为重要,有很多种词典结构,各有各的优缺点,最简单如排序...
  • 文章目录一、ElasticSearch简介二、ElasticSearch和Solr的区别三、ElasticSearch的优缺点四、ElasticSearch的倒排索引五、ElasticSearch的基本概念六、ElasticSearch和Kibana的安装与启动 一、ElasticSearch简介 ...
  • ElasticSearch 简介

    2021-01-29 01:42:36
    Elasticsearch一、什么是ElasticSearch二、Lucene与ElasticSearch关系三、Elasticsearch与Solr对比3.1优缺点四、Elasticsearch与关系型数据库对比五、倒排索引 一、什么是ElasticSearch ElasticSearch是一个基 于...
  • elsaticsearch 集群搭建 一,ElasticSearch优缺点 1.优点 集群配置简单 无缝扩展或者移除节点 隐藏分布式系统复杂性,对用户透明(对分片和搜索处理...灵活性问题(Mapping不可变,变需重建整个索引,与倒排索...
  • 58同城面经

    2020-10-22 14:01:54
    除了倒排索引还有其他方面加快查询吗? 写题: String倒序输出 一个无序数组,输出两个最大数 场景题: 比如像58商城,要设计一个广告或者招聘信息,你通过es来检索话,你应该考虑哪些方面?
  • 大话数据结构

    2017-02-09 15:26:37
    8.5.3 倒排索引 8.6 二叉排序树 8.6.1 二叉排序树查找操作 8.6.2 二叉排序树插入操作 8.6.3 二叉排序树删除操作 8.6.4 二叉排序树总结 8.7 平衡二叉树(AVL树) 8.7.1 平衡二叉树实现原理 8.7.2 平衡二叉树实现算法 ...
  • 倒排索引了解吗? ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? ES 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? 缓存 在项目中缓存是如何使用的?缓存...
  • 3.5.4线性表顺序存储结构的优缺点 54 3.6线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地,那干脆所有元素都不要考虑相邻位置了,哪有空位就到哪里。而只是让每个元素知道它下一个元素的位置在哪里。 ...
  • 3.5.4线性表顺序存储结构的优缺点 54 3.6线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地,那干脆所有元素都不要考虑相邻位置了,哪有空位就到哪里。而只是让每个元素知道它下一个元素的位置在哪里。 ...
  • 大话数据结构 程杰

    2018-09-01 10:06:43
    3.5.4线性表顺序存储结构的优缺点 54 3.6线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地,那干脆所有元素都不要考虑相邻位置了,哪有空位就到哪里。而只是让每个元素知道它下一个元素的位置在哪里。 ...
  • 3.5.1 获得元素操作 50 3.5.2 插入操作 51 3.5.3 删除操作 52 3.5.4 线性表顺序存储结构的优缺点 54 3.6 线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地,那干脆所有元素都不要考虑相邻位置了,哪有...
  • 大话数据结构-程杰

    2014-07-13 23:45:52
    3.5.4 线性表顺序存储结构的优缺点 54 3.6 线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地,那干脆所有元素都不要考虑相邻位置了,哪有空位就到哪里。而只是让每个元素知道它下一个元素的位置在哪里...
  • (4)页式存储管理的优缺点 优点: •虛存量大,适合多道程序运行,用户不必担心内存不够的调度操作; •内存利用率高,不常用的页面尽量不留在内存; •不要求作业连续存放,有效地解决了...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

倒排索引的优缺点