ElasticSearch入门

ES概述
ElasticSearch是一个分布式,高性能、高可用、可伸缩、RESTful 风格的搜索和数据分析引擎。通常作为Elastic Stack的核心来使用,Elastic Stack大致是如下这样组成的:

ES是一个近实时(NRT)的搜索引擎,一般从添加数据到能被搜索到只有很少的延迟(大约是1s),而查询数据是实时的。一般我们可以把ES配合logstash,kibana来做日志分析系统,或者是搜索方面的系统功能,比如在网上商城系统里实现搜索商品的功能也会用到ES。
ES与Mysql的概念对比
| ES | MySql |
|---|---|
| 字段 | 列 |
| 文档 | 一行数据 |
| 类型(已废弃) | 表 |
| 索引 | 数据库 |
ES面向文档
文档是所有可搜索数据的最小单元。ES的文档就像MySql中的一条记录,只是ES的文档会被序列化成json格式,保存在Elasticsearch中
这个json对象是由字段组成,字段就相当于Mysql的列,每个字段都有自己的类型(字符串、数值、布尔、二进制、日期范围类型);
当我们创建文档时,如果不指定字段的类型,Elasticsearch会帮我们自动匹配类型;
每个文档都有一个ID,类似MySql的主键,咱们可以自己指定,也可以让Elasticsearch自动生成;
类型Type
7.0版本开始,一个索引就只能创建一个类型了(_doc)。
索引(Index)
索引就相当于MySql里的数据库,它是具有某种相似特性的文档集合。反过来说不同特性的文档一般都放在不同的索引里;
索引的名称必须全部是小写;
在单个集群中,可以定义任意多个索引;
索引具有mapping和setting的概念,mapping用来定义文档字段的类型,setting用来定义不同数据的分布。
分片(shard)
ES提供了将索引细分为多个碎片的功能,这就是分片。这里咱们可以简单去理解,在创建索引时,只需要咱们定义所需的碎片数量就可以了,其实每个分片都可以看作是一个完全功能性和独立的索引,可以托管在集群中的任何节点上。
- 通过分片技术,咱们可以水平拆分数据量,同时它还支持跨碎片(可能在多个节点上)分布和并行操作,从而提高性能/吞吐量;
- ES可以完全自动管理分片的分配和文档的聚合来完成搜索请求,并且对用户完全透明;
- 主分片数在索引创建时指定,后续只能通过Reindex修改,但是较麻烦,一般不进行修改。
副本分片(replica shard)
遇到问题时实现分片的故障转移机制,ElasticSearch允许将索引分片的一个或多个复制成所谓的副本分片。
ES 与RESTful 风格
RESTful 的四个关键词:PUT(修改),POST(添加),DELETE(删除),GET(查询)。其中在ES里面PUT和POST的界限并不是很分明,有时候PUT也作为添加。
索引的基本操作(CRUD)
创建索引
PUT /ropledata |

删除索引
DELETE /datatest |

删除索引成功
修改副本
咱们如果对刚才创建的索引副本数量不满意,可以进行修改,注意:分片不允许修改
PUT ropledata/_settings |
插入数据
创建一个文档 (即插入一行数据)
POST /ropledata/_doc/101
{
"id":1,
"name":"风离的博客",
"page":"https://flya.top/",
"say":"风离的博客"
}

修改数据
ES里的文档是不可以修改的,但是可以覆盖,所以ES修改数据本质上是对文档的覆盖。ES对数据的修改分为全局更新和局部更新
全局更新

局部更新
局部更新 version+1 (现在局部更新好像每次都会更新Version了)

局部更新的底层流程:
内部先获取到对应的文档;
将传递过来的字段更新到文档的json中(这一步实质上也是一样的);
将老的文档标记为deleted(到一定时候才会物理删除);
将修改后的新的文档创建出来。
性能对比:全局更新本质上是替换操作,即使内容一样也会去替换;
局部更新本质上是更新操作,只有遇到新的东西才更新,没有新的修改就不更新;
局部更新比全局更新的性能好,因此推荐使用局部更新。版权声明:本文为CSDN博主「且听_风吟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26803795/article/details/106423578
*查询数据**(By Id)

删除数据(By Id)

查询或者删除的时候指定的ID是文档里面得字段id吗?(就是你刚创建的时候的那个id)
不是的,这点容易混淆,查询或者删除时候用到的ID是创建文档时候指定或者ES自动生成的那个id,而不是文档里面的那个叫
id字段!文档里面的文档字段是可以没有id的。






