Elastic Search 学习之路(二)——inverted index(反向索引)
这是篇翻译文,图画的挺有意思。
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(反向索引)的更多相关文章
- Elastic Search 学习之路(一)
一.基本概念及缘由 1.Sql vs nosql SQL:Structured Query Language Nosql:Not only SQL Relationship DB Relations: ...
- Elastic Search 学习之路(三)—— tutorial demo
一.ElasticSearch tutorial demo example 1. 单机.local.CRUD操作 实现方式: SpringBoot + ElasticSearch 拷贝的小demo,原 ...
- Redis——学习之路二(初识redis服务器命令)
上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息 s ...
- elastic search 学习笔记
Elastic search在数据分析的应用中相当于一个数据库的搜索引擎. 跟MySQL类似,它有自己的查询语言,只不过不是关系型数据库,属于NoSQL. 可以根据索引从分布式服务器文件系统中快速存取 ...
- elastic search 学习 一
初步阅读了elastic search 的文档,并使用command实践操作. 大概明白其概念模型.
- 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序
基于DM9000C的原厂代码修改dm9000c的驱动程序. 首先确认内存的基地址 iobase. 确定中断号码. 打开模块的初始化函数定义. 配置内存控制器的相应时序(结合DM9000C.C的手册). ...
- Python学习之路二
今天主要学习了列表,python的列表真的事太强大了,由于内容比较多,今天就先简单的介绍一下新学的几个成员函数吧. 首先我们要了解list是一种序列类型,其构造方式有四种形式: (1)空列表 [] ( ...
- zigbee学习之路(二)点亮LED
一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...
- python学习之路 二 :基本数据类型
本节重点 理解什么是变量? 掌握各种数据类型 理解可变类型和不可变类型 一.变量和常量 变量: 作用:存贮程序的中间结果在内存里,以备后边的程序调用 定义规范: 变量名只能是 字母.数字活下划线的任意 ...
随机推荐
- Zabbix监控笔记
了解zabbix,有必要了聊一下监控系统相关内容 企业中常用的开源监视系统目前有 cacti.Nagios.Open-Falcon.zabbix.prometheus等 使用监控系统的目的在于 /1. ...
- 下载器Folx如何实现排队下载功能
用户在下载多个文件时,当然会希望这些文件都能同时下载,以达到短时间内完成下载任务的目的.但另一方面来说,同时下载过多文件,会分散带宽资源,降低了每个文件的下载速度,从而导致下载时间的延长. 为了实现多 ...
- Java基础教程——缓冲流
缓冲流 "缓冲流"也叫"包装流",是对基本输入输出流的增强: 字节缓冲流: BufferedInputStream , BufferedOutputStream ...
- 终于有人把鸿蒙OS讲明白了,大佬讲解!快收藏!
来自 | GitHub科技 本文面向的是开发人员,主要想通过科普让大家了解一下鸿蒙开发.接下来,我想给大家科普一下这个这么火的鸿蒙系统. 到底什么是鸿蒙 OS 在官网上看到鸿蒙 OS 的简介是,分布式 ...
- 锐安信sslTrus与GeoTrust SSL证书的对比
当您想要为您的网站购买一款SSL证书时,是不是既想要价格便宜,又想要安全性能服务好的证书,最后又在品牌上犹豫不决?如何选择SSL证书?哪款SSL证书是最适合您的?本文将详细对比分析锐成信息平台上畅销品 ...
- Prafab Varient 预制体变体
预制体与类的类比思维: 预制体相当于一个类,当它应用到场景当中,就是一个实例. 类的继承特性也充分运用到预制体中,即预制体变体. 相似预制体的需求场景: 例子1:多个游戏的窗口 ...
- SpringBoot打包成Docker镜像
1. 本文环境 Maven:3.6.3(Maven配置参考) SpringBoot version:2.3.4.RELEASE Docker version: 19.03.11(Docker搭建参考) ...
- cf div2 round 688 题解
爆零了,自闭了 小张做项目入职字节 小李ak wf入职ms 我比赛爆零月薪3k 我们都有光明的前途 好吧,这场感觉有一点难了,昨天差点卡死在B上,要不受O爷出手相救我就boom zero了 第一题,看 ...
- 我在苦苦坚持的时候,WebStorm已经悄悄的“真香”起来
前言 最近接了一个活儿,是用WebStorm开发一个基于VUE的网站,但是我真的是几乎没接触过VUE相关的项目实践,更别说用WebStorm在实际中的应用,之前只是听朋友说多好用,但是,因为现有工具不 ...
- moviepy音视频开发:音频合成类CompositeAudioClip介绍
☞ ░ 前往老猿Python博文目录 ░ CompositeAudioClip是AudioClip的直接子类,用于将几个音频剪辑合成为一个音频剪辑.CompositeAudioClip类只有一个构造方 ...