关于安装就不多说了,以前的版本安装起来还停麻烦,需要你预先 安装 JDK,但是 Elasticsearch 7
及以后的版本相对来说 安装非常简单,内置一个 OpenJDK
,只需要下载 Elasticsearch
的安装包、解压、运行即可
关于下载你可以直接在以下链接中找到最新版下载
Elastic 具有很多丰富的产品,你可以在这里找到 产品
关于下载安装包 直接运行、解压我就不说了,接下来我演示使用 Docker
,并引入一个开箱即用的 Docker
环境
docker-elk 内置了 很多产品,比如 Elasticsearch
、Kibana
、Logstash
等,我们只需要简单的命令即可运行
git clone https://github.com/deviantony/docker-elk.git
我们做下简单的修改使 Kiana
支持中文
编辑 docker-compose.yml
,添加 environment
环境
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch
接着就可以运行了,(镜像编译可能需要一丢丢的时间)
docker-compose up
之后就可以打开浏览器测试了, Elasticsearch
默认的端口是:9200, Kibana
默认端口是:5601
默认是 启用安全套件的,默认用户名:elastic,密码:changeme,当然你可以做修改参考文档做修改,我这里就不做过多的介绍了。
打开浏览器运行 http://127.0.0.1:9200
,输入用户名,密码应该就可以看到如下界面。
看下 Kibana
,http://127.0.0.1:5601
可以看到 已经开启了中文。
至此,我们的环境就准备好了。
再开始讲之前 先说下 Kibana
的开发者工具,我们接下来使用的命令操作,都将在开发者工具中进行
POST users/_doc
{
"name":"hedeqiang",
"age":18,
"city":"北京"
}
可以看到 采用 POST
方法,ES
会默认生成一个 _id
,那么如果我们自己生成呢?我们可以采用 PUT
请求来指定 id
PUT users/_doc/1
{
"name":"PHP",
"age":7,
"city":"上海"
}
返回响应为:
如果我们重复执行一个文档 ID 的话,ES 会怎样呢?如果我们还是执行上面的 PUT
方法,那么 ES 会认为我们修改,他的 result
为 update
,_version
每次操作都会递增加 1。
可以看到 我们又添加了一个字段,又执行成功了,同时版本号增加, result
为 update
, 说明 PUT
方法如果添加一个不存在的 id,会创建该文档,否则会进行修改操作。(会将旧文档删除,再将新文档写入,同时版本 + 1)
如果我们并不希望每次操作版本都加 1 ,那么我们改怎么操作呢?,那么我们可以使用 _create
端点来实现:
PUT users/_create/2
{
"name":"Laravel",
"age":7,
"city":"张家口",
"address":"张家口南"
}
如果使用 _create
添加一个已存在的文档,那么将会报错,不允许添加
PUT users/_create/2
{
"name":"Laravel",
"age":7,
"city":"张家口",
"address":"张家口南"
}
响应为:
{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[2]: version conflict, document already exists (current version [1])",
"index_uuid": "qBZ16rnoR1aq5s8LlaIafA",
"shard": "0",
"index": "users"
}
],
"type": "version_conflict_engine_exception",
"reason": "[2]: version conflict, document already exists (current version [1])",
"index_uuid": "qBZ16rnoR1aq5s8LlaIafA",
"shard": "0",
"index": "users"
},
"status": 409
}
获取单个文档
GET users/_doc/1
我们也可以一次性获取多个文档,采用 _mget
进行批量读取:
GET _mget
{
"docs":[
{
"_index":"users",
"_id":1
},
{
"_index":"users",
"_id":2
}
]
}
POST users/_update/1
{
"doc": {
"mobile":"15099999999"
}
}
通常情况下,我们需要查询某些条件,然后进行修改,比如我们并不知道文档的 ID,那么可以采用 _update_by_query 的方式来进行搜索。
POST users/_update_by_query
{
"script": {
"source": "ctx._source.age++",
"lang": "painless"
},
"query": {
"term": {
"name": "php"
}
}
}
DELETE users/_doc/1
同理,删除文档也可以指定条件采用 _delete_by_query
POST users/_delete_by_query
{
"query": {
"match": {
"name": "php"
}
}
}
支持一次 API 操作,对不同索引进行操作,同时支持四种操作类型 index
、create
、update
、delete
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
返回结果:
{
"took" : 369,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1,
"status" : 201
}
},
{
"delete" : {
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"result" : "not_found",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1,
"status" : 404
}
},
{
"create" : {
"_index" : "test",
"_type" : "_doc",
"_id" : "3",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1,
"status" : 201
}
},
{
"update" : {
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1,
"status" : 200
}
}
]
}
首先创建了一个 test 的索引,然后删除一个不存在的文档,看到提示 not_found
,可以看到,执行的所有结果都返回了
以上就是 简单演示了 Elasticsearch
简单的增删改查操作。简单入个门。接下来深入学习搜索方面的 API。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有