ElasticSearch常用API使用教程

ElasticSearch 常用API使用教程

1、基本概念介绍

  • 索引:含有相同属性的集合
  • 类型:索引可以定义一个或者多个类型,文档必须属于一个类型
  • 文档:文档是可以被索引的基本数据单位
  • 分片:每个索引都有多个分片,每个分片都是Lucene索引
  • 备份:拷贝一份分片就完成了分片的备份

2、API使用

  • API基本格式:http://:/<索引>/<类型>/<文档id>
  • 常用的HTTP动词:GET/PUT/POST/DELETE
索引操作

新建索引

  • 直接新建一个book索引
1
$ curl -X PUT 'localhost:9200/book'
  • 通过新建类型为program_book来新建book索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$ curl -X PUT 'localhost:9200/book' -d '
{
"mappings": {
"program_book": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"author": {
"type": "keyword"
},
"number": {
"type": "integer"
},
"create_time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}'

# 或者
curl -X POST 'localhost:9200/book/program_book/_mapping?pretty' -d'{
"program_book": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"author": {
"type": "keyword"
},
"number": {
"type": "integer"
},
"create_time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}'
  • 通过插入一个或者多个文档来新建book索引
1
2
3
4
5
6
7
$ curl -X PUT 'localhost:9200/book/program_book/1' -d '
{
"title": "Java并发编程实战",
"author": "Doug",
"number": 100,
"create_time":"2017-08-01"
}'

查看新建的所有索引

1
$ curl -X GET 'localhost:9200/_cat/indices?v'

删除索引

  • 删除 book 索引
1
$ curl -X DELETE 'localhost:9200/book'

类型操作

新建类型

  • 新建 program_book 类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ curl -X PUT 'localhost:9200/book' -d '
{
"mappings": {
"program_book": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"author": {
"type": "keyword"
},
"number": {
"type": "integer"
},
"create_time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}'

修改类型

  • 索引book,给类型program_book 新增一个update_time字段
1
2
3
4
5
6
7
8
9
10
$ curl-XPOST'localhost: 9200/book/program_book/_mapping?pretty'-d'{
"program_books": {
"properties": {
"update_time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}'

文档操作

新增文档

  • 新增单条文档,指定Id
1
2
3
4
5
6
$ curl-XPUT'localhost: 9200/book/program_book/1'-d'{
"title": "重构",
"author": "佚名",
"number": 50,
"create_time": "2017-01-11"
}'
  • 新增单条文档,不指定id
1
2
3
4
5
6
$ curl-XPUT'localhost: 9200/book/program_book'-d'{
"title": "重构",
"author": "佚名",
"number": 50,
"create_time": "2017-01-11"
}'

查看文档

  • 查看/book/program_book/1这条记录,URL 的参数pretty=true表示以易读的格式返回。
1
$ curl 'localhost:9200/book/program_book/1?pretty=true'

修改文档

  • 修改就是使用 PUT 请求,重新发送一次新增文档的数据。
1
2
3
4
5
6
$ curl-XPUT'localhost: 9200/book/program_book/1'-d'{
"title": "修改操作-重构",
"author": "佚名",
"number": 50,
"create_time": "2017-01-11"
}'

删除文档

1
$ curl -X DELETE 'localhost:9200/book/program_book/1'

复杂查询

  • 查询指定索引,指定类型的的所有文档(/Index/Type/_search)
1
$ curl 'localhost:9200/book/program_book/_search?pretty'
  • 使用 Match 查询,指定的匹配条件查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
curl'localhost: 9200/book/program_book/_search?pretty'-d'{
"query": {
"match": {
"title": "重构"
}
},
"from": 1,
"size": 1,
"sort": {
"create_time": {
"order": "desc"
}
}
}'

# 参数解释
# from 偏移量,指定查询从位置1开始(默认是从位置0开始)
# size 指定返回数据的个数为1条
# 根据 create_time 进行排序
  • 使用 Match 查询,指定的匹配条件查询 (查询多个搜索关键字, Elastic 认为它们是or关系)
1
2
3
4
5
6
7
curl'localhost: 9200/book/program_book/_search?pretty'-d'{
"query": {
"match": {
"title": "重构 修改"
}
},
}'
  • 使用 Must 查询,指定的匹配条件查询 (查询多个搜索关键字, Elastic 认为它们是and关系)
1
2
3
4
5
6
7
8
9
10
11
$ curl 'localhost:9200/book/program_book/_search?pretty'  -d '
{
"query": {
"bool": {
"must": [
{ "match": { "desc": "重构" } },
{ "match": { "desc": "修改" } }
]
}
}
}'