ElasticSearch基本的概念和RestfulAPI
一、简介
- ES是基于RESTful web接口(构建在Lucene上)的分布式搜索服务
- 分布式文档数据库(JSON 格式存储数据),其中每个字段均可被索引,每个字段的数据均可被搜索
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
短时间内搜索和分析大量的数据,一般用于搜索情况复杂的时候
(例如我工作中使用es用于房屋信息的搜索,涉及到大量的查询条件和排序、分词等)
二、关系型数据库对比
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
关系数据库 -> 数据库 -> 表 -> 记录(一行) -> 字段(一列)
Elasticsearch -> 索引 -> 类型 -> 文档 -> 字段
图片引自https://www.cnblogs.com/wangzhuxing/p/9404587.html
三、主要概念
- 索引(index)
ElasticSearch的一个逻辑存储,可以理解为关系型数据库中的数据库,对ES操作时需要指明具体的索引名,通过索引名完成该索引下文档的CURD。
索引的名字必须全是小写字符
- 类型(type)_
已移除
每个索引中都存在大量的Document,利用Type定义这批文档为同一种类型,可以理解为关系型数据库中的表。每个Type可以有不同的结构(表与表之间的结构可以是不同的),但是不同的Type不能为相同的属性设置不同的类型(同一个属性在不同表中一定要是相同的类型)。
在ES6.0.0及更高的版本中,创建的索引只能包含一个映射类型。在6.0.0以下的版本中创建的一个索引映射多个类型的索引在6.0.0版本中继续发挥作用,但是将在7.0.0中完全删除。
- 文档(document)
存储在es中的主要实体。类似数据库表中的某一行数据记录,由多个字段(field)构成,并且有一个唯一的标识符。
CURD就是根据标识符(文档ID)来进行的。
- 字段(field)
类似于数据库表中的字段 - 映射(mapping)
就是对索引的字段名及其数据类型进行定义
- ES默认是动态创建索引和索引类型的mapping的,自动创建不灵活,例如自动创建的分词
四、API简单使用
以下的使用都是在地址栏中输入参数,非常局限,了解即可,重点掌握DSL
1. 添加/删除索引
1) 索引的添加
语法:
PUT /{索引名称}
参数:
{
"settings": {
"number_of_shards": {分片数},
"number_of_replicas": {副本数}
}
}
PostMan测试:
结果:
2) 索引的删除
语法:
DELETE /{索引名称}
参数: 无
PostMan测试:
结果:
2. 添加/删除/查询/修改文档
1)创建文档
语法:
POST /{索引}/{索引类型}/{文档id}
参数:JSON字符串
{
"属性1": "值1",
"属性2": "值2",
........
}
PostMan测试:
结果:
2)修改文档(替换)
语法:
PUT /{索引}/{索引类型}/{文档id}
参数:JSON字符串
{
"属性1": "值1",
"属性2": "值2",
........
}
在ES中,原则上是不允许更新数据的,我们只能采取覆盖的方法实现
必须带上所有的field,否则其他数据会丢失
PostMan测试:
结果:
3)修改文档(局部更新)
语法:
POST /{索引}/{索引类型}/{文档id}/_update
参数:JSON字符串
{
"doc":{
"修改的属性1": "值1",
"修改的属性2": "值2",
........
}
}
PostMan测试:
结果:
4)查询文档
语法:
GET /{索引}/{索引类型}/{文档id}
参数:无
5)删除文档
语法:
DELETE /{索引}/{索引类型}/{文档id}
参数:无
3. 查询所有文档
语法:
GET /{索引}/{索引类型}/_search