首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch是如何在物理层实现的

elasticsearch是如何在物理层实现的
EN

Stack Overflow用户
提问于 2018-01-07 06:24:00
回答 1查看 132关注 0票数 0

我想知道如何执行索引文档的命令(Put / index / type /id{data}),以及文档是如何在物理层存储的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-07 10:02:22

我试图为您简要总结Elasticsearch的重要部分,但我绝对建议您阅读权威指南

简介

倒排指数:

本质上,Elasticsearch是基于一种名为Lucene的技术设计的(该技术是在1998年作为Apache项目的一部分发布的)。Lucene被设计为从插入到系统中的文档创建反向索引。Elasticsearch后来开始发挥作用,使该系统得以分发。老实说,这就是弹性搜索的力量来源。

为了理解Elasticsearch,首先需要了解Elasticsearch中的索引。索引基本上意味着从给定的文档创建一个倒排的索引。请阅读以下链接以理解倒排索引。

链接:倒置指数

分布式执行请求:

Elasticsearch是一种分布式技术,它使多个不同的节点在同一网络中具有弹性运行成为可能。所有创建的节点一起组成一个集群。

如果在特定索引上运行GET命令,将得到模式信息如下所示:

代码语言:javascript
复制
{
 "mappings": { --> mappings component of the index defines the structure of what fields contain what kind of data
   ...
 },
 "settings": { --> defines configuration settings for an index
   ...
 }
}

如果详细查看“设置”部分,您可能会发现以下内容非常类似:

代码语言:javascript
复制
"settings": {
   "index": {
     "creation_date": "1504387536767",
     "number_of_shards": "5",           
     "number_of_replicas": "1",
     "uuid": "bfVuaeZtTYyWffcqKHOP_w",
     "version": {
       "created": "5050199"
     },
     "provided_name": "noname"
   }
 }

number_of_shards:这定义了索引的物理表示形式。碎片主要用于将索引文档分成不同的块。

number_of_replicas:这定义了备份碎片的数量。

现在让我们来看看下面的模式

代码语言:javascript
复制
cluster

|-------------------------------------------------------------------------------------------------------|
|  node1                    node2                                                                       |
|  |---------------|        |---------------|                                                           |
|  | P0            |        | P1            |  --> P0 is in node1 and its replica(R0) is in node2       |
|  | R1            |        | R0            |      P1 is in node2 and its replica(R1) is in node1       |
|  |               |        |               |                                                           |
|  |               |        |               |                                                           |
|  |---------------|        |---------------|                                                           |
|-------------------------------------------------------------------------------------------------------|

P表示主碎片

R表示副本碎片

在本例中,如果任何节点下降,我们仍然可以到达所有数据,因为node1有P0和R1,node2有P1和R0。此设置还有利于数据读取请求的负载平衡。

这只是一个非常简单的例子,让您了解Elasticsearch如何在不深入了解细节的情况下使事情变得更快。

文本分析:

当我们向Elasticsearch发送文档时,文档会经过一个分析过程。这个过程是一个创建倒排索引表示的过程,如果有,则应用过滤器(例如停止字删除、低胁迫、词干和同义词)。

如果我们索引两个文档,如下面的示例所示,弹性最终将创建lucene索引表,如下所示

示例:

doc1 =我认为弹性是下一件大事

doc2 =下一个大数据

一旦分析器处理了这两个文档,它将创建倒排索引,如下所示

代码语言:javascript
复制
  |---------|------------|-----------|
  |  Token  | Exits in 1 | Exits in 2|
  |---------|------------|-----------|
  |I        |     X      |           |
  |think    |     X      |           |
  |elastic  |     X      |           |
  |is       |     X      |     X     |
  |the      |     X      |           |
  |next     |     X      |     X     |
  |big      |     X      |     X     |
  |thing    |     X      |     X     |
  |in       |     X      |     X     |
  |data     |            |     X     |
  |---------|------------|-----------|

在为文档创建倒排索引之后,我们可以搜索一个单词。如果我们搜索“弹性”这个词,它会返回这两个文档。如果搜索“数据”一词,它将返回第二个文档。

额外:

RDBMS到弹性搜索

如果您熟悉关系数据库,下面的图表还可以帮助您理解哪些部分与Elasticsearch中的信息匹配

代码语言:javascript
复制
 |Elasticsearch|Relational DB|
 |Field        |Column       |
 |Document     |Row          |
 |Type         |Table        |
 |Index        |Database     |

“索引”一词的两个不同含义

还值得一提的是,在Elasticsearch中,"index“一词可以互换使用。我们在Elasticsearch中对两种不同的东西使用"index“这个词。

第一个是指弹性DB的时间。弹性数据库称为索引(如动物索引)。数据库中有类型(在本例中,我们可以有两栖动物、爬行动物和哺乳动物)。在类型中,我们有文档,在文档中,我们有字段。

第二个是我们将文档插入索引的时间。这被称为“索引文档”。例如,下面的PUT请求触发弹性来索引给定的文档。

代码语言:javascript
复制
 PUT /animals/birds/parrot
 {
  "info": "Parrots, also known as psittacines",
  "lifespan": 50,
  "avglength": 3.4,
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48134850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档