一、ES的概念及使用场景
ElasticSearch是一个分布式,高性能、高可用、可伸缩、RESTful 风格的搜索和数据分析引擎。通常作为Elastic Stack的核心来使用
我们通过将ES 和 mysql对比来更好的理解 ES,ES和mysql相关的基本概念的对比表格如下:
ES | MySql |
---|---|
字段 | 列 |
文档 | 一行数据 |
索引 | 数据库 |
二、基础使用
前面我们已经介绍过了ES 是RESTful 风格的系统,所以我们需要先掌握RESTful 的四个关键词:
PUT(修改),
POST(添加),
DELETE(删除),
GET(查询)。
其中在ES里面PUT和POST的界限并不是很分明,有时候PUT也作为添加
1、索引操作
1)创建一个空索引
如下代码,咱们创建了一个1副本5分片的 test 索引,然后咱们可以在Elasticsearch Head里刷新一下,并查看索引的信息:
PUT /test
{
"settings": {
"number_of_shards": "5",
"number_of_replicas": "1"
}
}
通过 kibana 中的 dev_tools 操作 ES
在谷歌浏览器的elasticsearch-head浏览数据
2)修改副本
咱们如果对刚才创建的索引副本数量不满意,可以进行修改,注意:分片不允许修改。
PUT test/_settings
{
"number_of_replicas" : "2"
}
3)删除索引
当这个索引不想用了,可以进行删除,执行如下命令即可,执行成功后,刷新ElasticSearch Head可以看到刚才创建的ropledata索引消失了:
DELETE /test
2、数据增删改查
1)插入数据
插入数据的时候可以指定id,如果不指定的话,ES会自动帮我们生成。我们以指定id为例,如下代码是我们创建了一个101的文档,创建成功后,可以在Elasticsearch Head的数据浏览模块里看到这些数据,代码及演示如下:
指定id
POST /test/_doc/101
{
"name": "li",
"age": 1,
"say": "hello"
}
POST /test/_doc/
{
"name": "li2",
"age": 2,
"say": "hello2"
}
可以发现,不指定id后,会自动生成
2)修改数据
这里大家要特别注意,ES里的文档是不可以修改的,但是可以覆盖,所以ES修改数据本质上是对文档的覆盖。ES对数据的修改分为全局更新和局部更新
全局更新
PUT /test/_doc/101
{
"name": "li11111",
"age": 1,
"say": "hello"
}
可以看到 version +1了
局部更新
POST /test/_update/101
{
"doc":
{
"age": 100
}
}
这时候我们可以多次去执行上面的局部更新代码,会发现除了第一次执行,后续不管又执行了多少次,version都不再变化,当然如果 age数值变化后再次执行 version还是 +1的
性能对比:
全局更新本质上是替换操作,即使内容一样也会去替换;
局部更新本质上是更新操作,只有遇到新的东西才更新,没有新的修改就不更新;
局部更新比全局更新的性能好,因此推荐使用局部更新。
3)查询数据
GET /test/_doc/vOQs744B_yXDkWv7KG8_
4)删除数据
DELETE /test/_doc/101