ElasticSearch基础
Lucene简介
Lucene是一种高性能、可伸缩的信息搜索(IR)库,在2000年开源,最初由鼎鼎大名的Doug Cutting开发,是基于Java实现的高性能的开源项目。Lucene采用了基于倒排表的设计原理,可以非常高效地实现文本查找,在底层采用了分段的存储模式,使它在读写时几乎完全避免了锁的出现,大大提升了读写性能。
Elasticsearch基于lucene,隐藏其复杂性,并提供简单易用的restful API接口、java API接口。所以理解ES的关键在于理解lucene的基本原理。
ElasticSearch中的名称
-
Cluster【集群】: 一群物理机构成的 elastic 服务群, 每台机器是一节点
-
physical-shards【物理分片】: 每个分片实际上是一个独立的索引,底层是一个 Lurence的实例。类比mysql,相当于水平分表
-
Index【索引】 : 相当于一个命名空间,在关系型数据数据库中,相当于 一个 database
-
Type 【类型】 : 完全相同字段名的json 构成一个type 。类比mysql, 相当于不同的数据表 , 但是不同的 type 应该有相似的结构。 性质完全不同的数据(比如products和users)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。
// 两个不同的类型
//type: user
{
"id": 1,
"name":"xxx"
}
// type product
{
"price":1.00,
"name": "书"
}
-
Replicas【副本】: 所有文档的复制。 类比:mysql 相当于从库
-
Document【文档】:一个JSON 对象。类比myssql, 表中一条数据
-
indices :应该是 index的负数形式,表示多个索引
ElasticSearch中集群健康信息
ElasticSearch中CRUD
- 新增文档
先创建一个测试所用的索引
PUT /huangliang_test_index
在该索引下新增一个是文档。
POST /huangliang_test_index/_doc
{
"name": "huangliang",
"sex": "男",
"age": 26
}
- 查询文档 (简单查询)
根据ElasticSearch中文档的id值进行简单的查询,相当于关系型数据库中的select * from table where id= xxx,其中id列是主键。
GET /huangliang_test_index/_doc/XZ_yrIABtyKywegQcIFd
- 更新文档
更新文档的方式可以使用POST和PUT两种,这两种方式产生的结果也是不相同的。
- a.PUT方式
PUT /huangliang_test_index/_doc/XZ_yrIABtyKywegQcIFd
{
"name": "huangliang11"
}
查询更新后的结果为:
- b.POST方式
POST /huangliang_test_index/_doc/XZ_yrIABtyKywegQcIFd
{
"name": "huangliang111",
"sex": "男",
"age": 26
}
查询更新后的结果为:
结论:使用PUT方式更新文档会对整个文档进行一个覆盖,使用POST方式更新文档则只会针对文档中的字段进行更新。
4. 删除文档
使用delete API删除文档
DELETE /huangliang_test_index/_doc/XZ_yrIABtyKywegQcIFd
5.删除索引
同样使用delete API删除索引
DELETE /huangliang_test_index