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

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. [web安全原理分析]-XEE漏洞入门

    前言 1 前言 XXE漏洞 XXE漏洞全称(XML External Entity Injection)即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致 ...

  2. rkhunter

    0 0 * * 0 /usr/local/bin/rkhunter -c --cronjob 定时工具

  3. 关于Java集合框架,这篇讲的还算不错了,建议大家看看!

    集合框架 为什么要用集合而非数组: 虽然数组是保存一组对象最有效的方式,但是数组具有固定尺寸,但在写程序时并不知道将需要多少个对象.而集合能够自动地调整自己的尺寸. 打印数组时,必须使用Arrays. ...

  4. 怎么绘制C语言选择和循环语句的思维导图

    C语言是一门非常基础的计算机语言,是大部分本科学生的公共专业,在C语言的学习中,选择和循环语句是至关重要的部分,利用思维导图可以有效节约时间并加深知识点记忆. 接下来就为大家介绍一下我用iMindMa ...

  5. Boom 3D的保真度是什么,如何应用

    Boom 3D是一款非常优秀的3D音频软件,拥有3D音效.环境模式.空间模式.夜间模式.保真度等多种音效模式,可以为用户提供多种音效体验感. 第一.什么是保真度 或许第一次接触音频软件的朋友就会问到什 ...

  6. Word1-提取图片文字

    1.OneNote # 将图片以图片格式粘贴在OneNote中-右键选择"复制图片中的文本"-粘贴"只保留文本"即可 这种方式识别率较高!!! 2.手机QQ图片 ...

  7. windows创建隐藏用户的powershell脚本

    通过保存并重新注册已删除用户的注册表的方式来隐藏用户,未登录时登陆界面不可见,登陆后可见 方法详情见: https://www.k0rz3n.com/2018/06/26/windows%E6%B8% ...

  8. nmap安装和使用

    nmap安装和使用 安装 官网地址 https://nmap.org/download.html 许多流行的Linux发行版(Redhat.Mandrake.Suse等)都使用RPM软件包管理系统,方 ...

  9. 【数据结构模版】可持久化线段树 && 主席树

    浙江集训Day4,从早8:00懵B到晚21:00,只搞懂了可持久化线段树以及主席树的板子.今天只能记个大概,以后详细完善讲解. 可持久化线段树指的是一种基于线段树的可回溯历史状态的数据结构.我们想要保 ...

  10. 【Java】Java socket通信使用read,readline函数的阻塞问题

    Socket通信是Java网络编程中比较基础的部分,其原理其实就是源ip,源端口和目的ip,目的端口组成的套接字通信.其底层还设及到了TCP协议的通信. Java中的Socket通信可以通过客户端的S ...