这是篇翻译文,图画的挺有意思。

Elastic使用非常特殊的数据结构,称作反向索引。反向索引中,包括了一组document中出现的唯一的单词,和对应的单词,所出现的位置。反向索引是在ES中,document被创建的同时,创建的。创建的过程称作“分析”。接下来,会说明它是如何被创建以及如何被保存在shard中用来搜索docuemnt

从Document到可被查找的索引

Client端发送命令在ELS中创建document。

一旦document在ELS中被创建,它要经历分析阶段。在这阶段中,document被tokenized(整体的东西被拆分成个体)和normalised(正常化)。

对于给定的document,反向索引将被创建,保存在临时的buff之中,直到buffer变满为止。一旦变满,将被冲到segment中。

segment是最小的逻辑单元,shard可以看做是一组segment的集合。segment里全是从buffer过来的反向索引。

一旦segment装满了反向索引,shard就可以被搜索。

用于索引和查询的文本分析(反向索引的创建)

分析过程是在shard中,创建索引的核心过程。不仅在创建document时被使用,还会在查询时使用。下图是在索引过程中如何被使用的。

假设我们有两条document要被创建

{
"name" : "Nikhil",
"id": "zytham",
"comment" : "The thin lifeguard was swimming in the lake"
"date" : "2018-02-12"
} {
"name" : "Ranjan",
"id": "nranjan",
"comment" : "Swimmers race with the skinny lifeguard in lake"
"date" : "2018-02-12"
}

假设我们关心comment部分。我们有两行文本要分析。

1. The thin lifeguard was swimming in the lake

2. Swimmers race with the skinny lifeguard in lake

Tokenisation(分解化):

首先区分单词,创建排序列表。下方1,2表示出现在第几个document中。

Token Present in Document
Swimmers 2
The 1
in 1,2
lifeguard 1,2
lake 1,2
race 2
skinny 2
swimming 2
the 1,2
thin 1
was 1
with 1

Filter:

去除停顿词,如the、in等。

小写化(目的是查询时不区分大小写)

获取词根(swimming to swim)

同义词转换(thin == skinny)

这次都是基于ELS提供的内置的文本分词器。也有对应的中文的分词器。

查询document时进行文本分析。

当使用get命令查询document,索引化时会使用同样的分析器。如:查询the thin时,会先去掉the,然后同义词转换,最后查询,返回检索到的document.

参考资料:

http://www.devinline.com/2018/09/elasticsearch-inverted-index-and-its-storage.html

Elastic Search 学习之路(二)——inverted index(反向索引)的更多相关文章

  1. Elastic Search 学习之路(一)

    一.基本概念及缘由 1.Sql vs nosql SQL:Structured Query Language Nosql:Not only SQL Relationship DB Relations: ...

  2. Elastic Search 学习之路(三)—— tutorial demo

    一.ElasticSearch tutorial demo example 1. 单机.local.CRUD操作 实现方式: SpringBoot + ElasticSearch 拷贝的小demo,原 ...

  3. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  4. elastic search 学习笔记

    Elastic search在数据分析的应用中相当于一个数据库的搜索引擎. 跟MySQL类似,它有自己的查询语言,只不过不是关系型数据库,属于NoSQL. 可以根据索引从分布式服务器文件系统中快速存取 ...

  5. elastic search 学习 一

    初步阅读了elastic search 的文档,并使用command实践操作. 大概明白其概念模型.

  6. 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序

    基于DM9000C的原厂代码修改dm9000c的驱动程序. 首先确认内存的基地址 iobase. 确定中断号码. 打开模块的初始化函数定义. 配置内存控制器的相应时序(结合DM9000C.C的手册). ...

  7. Python学习之路二

    今天主要学习了列表,python的列表真的事太强大了,由于内容比较多,今天就先简单的介绍一下新学的几个成员函数吧. 首先我们要了解list是一种序列类型,其构造方式有四种形式: (1)空列表 [] ( ...

  8. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  9. python学习之路 二 :基本数据类型

    本节重点 理解什么是变量? 掌握各种数据类型 理解可变类型和不可变类型 一.变量和常量 变量: 作用:存贮程序的中间结果在内存里,以备后边的程序调用 定义规范: 变量名只能是 字母.数字活下划线的任意 ...

随机推荐

  1. [i春秋]“百度杯”CTF比赛 十月场-Hash

    前言 涉及知识点:反序列化.代码执行.命令执行 题目来自:i春秋 hash  如果i春秋题目有问题可以登录榆林学院信息安全协会CTF平台使用 或者利用本文章提供的源码自主复现 [i春秋]"百 ...

  2. 关于AOP思想,建议你看看这份五年开发总结的笔记,写的太详细了

    前言 OOP(Object Oriented Programing)面向对象编程 以对象为基本单位进行程序开发,通过对象间的彼此协同,相互协调,完成程序的构建 POP(Producer Oriente ...

  3. 新鲜出炉!阿里Java后端面经,已拿offer!

    前面给大家分享了一篇字节跳动拿下offer的面经,很多小伙伴都私信我说收获很大,感兴趣的朋友可以回头去看看.很多小伙伴还问我有没有其他大厂的面试题分享,这不他来啦,阿里2020春招面试题给大家整理在下 ...

  4. 深度分析:面试阿里,字节99%会被问到Java类加载机制和类加载器

    1. 类加载机制 所谓类加载机制就是JVM虚拟机把Class文件加载到内存,并对数据进行校验,转换解析和初始化,形成虚拟机可以直接使用的Jav类型,即Java.lang.Class. 2. 类加载的过 ...

  5. 【VUE】3.表单操作

    1. Form组件渲染 1. components -> 新增组件Form.vue <template> <div>表单验证</div> </templ ...

  6. eclipse 老坑巨滑之内存溢出OOM

    绪:今天接手一个古老项目,tomcat6+jdk6.被   java.lang.OutOfMemoryError: PermGen space  啪啪打脸, 网上确实有很多解决方法,主要有三种类型:一 ...

  7. B. Irreducible Anagrams【CF 1290B】

    思路: 设tx为t类别字符的个数. ①对于长度小于2的t明显是"YES"②对于字符类别只有1个的t明显是"YES"③对于字符类别有2个的t,如左上图:如果str ...

  8. Java进阶专题(十八) 系统缓存架构设计 (下)

    前言 上章节介绍了Redis相关知识,了解了Redis的高可用,高性能的原因.很多人认为提到缓存,就局限于Redis,其实缓存的应用不仅仅在于Redis的使用,比如还有Nginx缓存,缓存队列等等.这 ...

  9. 3、Spring Cloud Rest工程创建(通过IDEA创建)

    1.Rest微服务构建简介 (1).介绍 以Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务. (2).Myb ...

  10. TCP的流量控制和阻塞控制

    流量控制和阻塞控制实例: 可以用一个例子来说明这种区别.设某个光纤网络的链路传输速率为1000Gbit/s.有一台巨型计算机向一台个人电脑以1Gbit/s的速率传送文件.显然,网络本身的带宽是足够大的 ...