我想知道如何执行索引文档的命令(Put / index / type / id {data})以及如何在物理级别存储文档。我想知道术语的硬件级别含义索引,类型,文档,分片。任何人都可以给出elasticsearch的硬件级实现
答案 0 :(得分:0)
我试着简要总结一下Elasticsearch的重要部分,但我绝对建议您阅读The definitive guide。
摘要
倒置索引:
从本质上讲,Elasticsearch是基于一项名为Lucene的技术设计的(该项目于1998年作为Apache项目的一部分发布)。 Lucene旨在从插入系统的文档中创建反向索引。 Elasticsearch后来发挥作用,使该系统得以分发。说实话,这就是弹性搜索的力量所在。
为了理解Elasticsearch,首先需要了解Elasticsearch中的索引。索引基本上意味着从给定文档创建倒排索引。请阅读以下链接以了解反向索引。
分布式执行请求:
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,
}