第二章 ElasticSearch RESTful API
文章目录
一、创建非结构化索引
PUT /hello
{
"settings": {
"index": {
"number_of_shards": "2",
"number_of_replicas": "0"
}
}
}
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "hello"
}
DELETE /hello
{
"acknowledged": true
}
新建索引时报错
{
"error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
"status" : 406
}
解决办法
编辑head插件的/usr/src/app/_site/vendor.js文件
sudo docker cp 0915c:/usr/src/app/_site/vendor.js ~/Desktop
#修改完后
sudo docker cp ~/Desktop/vendor.js 0915c:/usr/src/app/_site
修改共有两处:
1.第6886行 /contentType: "application/x-www-form-urlencoded
改为 contentType: “application/json;charset=UTF-8”
2.第7573行 var inspectData = s.contentType === “application/x-www-form-urlencoded” &&
改为 var inspectData = s.contentType === “application/json;charset=UTF-8” &&
二、插入数据
1.指定id插入
URL规则:
POST /{索引}/{类型}/{id}
POST /hunoob/user/1001
#入参
{
"id":1001, "name":"小虎", "age":20, "sex":"男"
}
#响应
{
"_index": "hunoob",
"_type": "user",
"_id": "1001",
"_version": 1,
"result": "created",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 4,
"_primary_term": 1
}
2.不指定id插入
POST /hunoob/user
#入参
{
"id":1002, "name":"小红", "age":18, "sex":"女"
}
#响应
{
"_index": "hunoob",
"_type": "user",
"_id": "x-wv3HYBQmiNC6TtoZ29",
"_version": 1,
"result": "created",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
三、更新数据
1.覆盖更新
PUT /hunoob/user/1001
{
"id":1001, "name":"张三", "age":31
}
{
"_index": "hunoob",
"_type": "user",
"_id": "1001",
"_version": 2,
"result": "updated",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
更新后版本+1,且sex字段为空
2.局部更新
POST /hunoob/user/1001/_update
{
"doc": {
"age": 41
}
}
{
"_index": "hunoob",
"_type": "user",
"_id": "1001",
"_version": 3,
"result": "updated",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 6,
"_primary_term": 1
}
注意请求方式为POST,url带上_update
四、搜索数据
1.根据id搜索数据
GET /hunoob/user/1001
#响应
{
"_index": "hunoob",
"_type": "user",
"_id": "1001",
"_version": 3,
"_seq_no": 6,
"_primary_term": 1,
"found": true,
"_source": {
"id": 1001,
"name": "张三",
"age": 41
}
}
2.搜索全部数据
GET /hunoob/user/_search
#响应,默认返回十条数据
{
"took": 19,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "hunoob",
"_type": "user",
"_id": "x-wv3HYBQmiNC6TtoZ29",
"_score": 1.0,
"_source": {
"id": 1002,
"name": "小红",
"age": 18,
"sex": "女"
}
},
{
"_index": "hunoob",
"_type": "user",
"_id": "1001",
"_score": 1.0,
"_source": {
"id": 1001,
"name": "张三",
"age": 41
}
}
]
}
}
3.根据关键词搜索数据
#搜索年龄为41的数据
GET /user/_search?q=age:41
#响应
{
"took": 29,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "hunoob",
"_type": "user",
"_id": "1001",
"_score": 1.0,
"_source": {
"id": 1001,
"name": "张三",
"age": 41
}
}
]
}
}
4.DSL搜索
Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。
POST /hunoob/user/_search
#请求参数
{
"query": {
"match": {
"age": 18
}
}
}
#响应结果
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "hunoob",
"_type": "user",
"_id": "x-wv3HYBQmiNC6TtoZ29",
"_score": 1.0,
"_source": {
"id": 1002,
"name": "小红",
"age": 18,
"sex": "女"
}
}
]
}
}
五、删除数据
DELETE /hunoob/user/1001
{
"_index": "hunoob",
"_type": "user",
"_id": "1001",
"_version": 4,
"result": "deleted",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 1
}