目录
ElasticSearch是一个高度可扩展的开源搜索引擎,所有的操作都是通过REST API的形式操作。业也就是说,可以使用任何HTTP客户端来通信。
Elasticsearch特性
- Elasticsearch可扩展高达PB级的结构化和非结构化数据。
- Elasticsearch可以用来替代MongoDB和RavenDB等做文档存储。
- Elasticsearch使用非标准化来提高搜索性能。
Elasticsearch基本概念概念
- 索引:它是不同类型的文档和文档属性的集合。索引还使用分片的概念来提高性能,可以理解为mysql中的新建一个数据库的概念。
- 类型:它是共享同一索引中存在的一组公共字段的文档的集合,可以理解为mysql中的数据库表。
- 类型:它是以JSON格式定义的特定方式的字段集合。可以理解为mysql表中的行数据。
Elasticsearch安装
使用docker镜像的方式快速安装
#拉取镜像
docker pull elasticsearch:7.4.2
#启动镜像
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.4.2
安装后访问http://ip/9200 ,出现下图启动成功
安装图形化客户端kibana,操作更加方便
docker pull kibana:7.4.2
#ELASTICSEARCH_HOSTS 指定 elasticsearch服务ip
docker run -itd --name kibana -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.2.19:9200 -d kibana:7.4.2
访问http://ip:5601
初步检索
_cat
#查看所有节点
GET /_cat/nodes
#查看es健康状况
GET /_cat/health
#查看主节点
GET /_cat/master
#查看所有索引
GET /_cat/indices
索引一个文档(保存一条数据)
PUT /students/student/1
{
"name":"zhangsan"
}
保存一条数据,保存在哪个索引的哪个类型下,并且指定唯一标识ID,格式如下:
http://localhost:9200/<索引名称>/<类型名称>/[唯一ID]
索引和类型是必需的,而id
部分是可选的。如果不指定ID
,ElasticSearch会为我们生成一个ID
。 但是,如果不指定id,应该使用HTTP的POST
而不是PUT
请求,索引名称是任意的。如果服务器上没有此名称的索引,则将使用默认配置来创建一个索引。类型名称也是任意的。我们可以把任何东西放到索引中,只要它是个JSON对象。执行第一次是新增,多次执行变为更新,版本号会自动增加。
查询文档(查询一条数据)
#查询/students索引下student类型ID为1的数据
GET /students/student/1
响应结果
{
"_index" : "students", //在哪个索引下
"_type" : "student", //在哪个类型下
"_id" : "1", //唯一标识ID
"_version" : 31, //版本号
"_seq_no" : 30, //并发控制字段, 每次更新就会+1,用来做乐观锁
"_primary_term" : 1, //同上,主分片重新分配 如重启,就会变化
"found" : true,
"_source" : { //返回的实际数据
"name" : "wangwu"
}
}
更新文档(修改一条数据)
#查询文档
GET /students/student/1#更新文档
POST /students/student/1
{
"name":"lisi"
}#或者
POST /students/student/1/_update
{
"doc":{
"name":"wangwu"
}
}#区别:带“_update”更新会检查版本,如果没有任何修改,版本号不变,result不变
#不带“_update”每次执行版本号都会变化
删除文档和索引(删除数据)
DELETE /schools/student/1
DELETE /customer
Bluk批量API
批量新增
在students索引student类型下批量新增
POST /students/student/_bulk
{"index":{"_id":"2"}}
{"name":"lisi"}
{"index":{"_id&#