如何在物理层面实施弹性搜索

时间:2018-01-07 06:24:01

标签: elasticsearch

我想知道如何执行索引文档的命令(Put / index / type / id {data})以及如何在物理级别存储文档。我想知道术语的硬件级别含义索引,类型,文档,分片。任何人都可以给出elasticsearch的硬件级实现

1 个答案:

答案 0 :(得分:0)

我试着简要总结一下Elasticsearch的重要部分,但我绝对建议您阅读The definitive guide

摘要

倒置索引:

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

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

链接:Inverted Index

分布式执行请求:

Elasticsearch是一种分布式技术,可以让多个不同的节点在同一网络中运行弹性。所有创建的节点一起形成一个集群。

如果在特定索引上运行GET命令,您将获得以下架构信息:

{
 "mappings": { --> mappings component of the index defines the structure of what fields contain what kind of data
   ...
 },
 "settings": { --> defines configuration settings for an index
   ...
 }
}

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

"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:这定义了备份分片的数量。

现在让我们看看以下架构

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 =下一件大事就是大数据

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

  |---------|------------|-----------|
  |  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     |
  |---------|------------|-----------|

为文档创建反向索引后,我们可以搜索单词。如果我们搜索“弹性”这个词,它会返回两个文件。如果我们搜索单词“data”,它最终会返回第二个文档。

<强>附加

RDBMS到Elasticsearch

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

 |Elasticsearch|Relational DB|
 |Field        |Column       |
 |Document     |Row          |
 |Type         |Table        |
 |Index        |Database     |

“index”一词的两个不同含义

值得一提的是,“索引”一词在Elasticsearch中可以互换使用。我们在Elasticsearch中使用“index”这个词来表达两个不同的东西。

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

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

 PUT /animals/birds/parrot
 {
  "info": "Parrots, also known as psittacines",
  "lifespan": 50,
  "avglength": 3.4,
 }