一、Elasticsearch基本概念
- 索引含有相同属性的文档集合
- 类型索引可以定义一个或多个类型,文档必须属于一个类型
- 文档文档是可以被索引|的基本数据单位
- 分片 每个索引都有多个分片,每个分片是一个Lucene索弓|
- 备份 拷贝一份分片就完成了分片的备份
二、Elasticsearch基本用法
1、RESTFul API
- API基本格式:
http://<ip>:<port>/<索引>/<类型>/<文档id>
- 常用HTTP动词:
GET/PUT/POST/DELETE
2、创建索引
- 非结构化创建
先创建索引:
查看概览:
查看索引数据(非结构化索引):
- 结构化创建
通过复合查询编写结构化索引提交请求:
刷新刚刚提交的请求并查看结构化索引:
为了方便,可以在postman中进行添加索引数据:
url: 127.0.0.1:9200/people
method: PUT
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"man": {
"properties": {
"name": {
"type": "text"
},
"country": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
请求发送成功之后,可以在浏览器上进行刷新检验,结果如下:
3、插入
- 指定文档id插入
url: 127.0.0.1:9200/people/man/1 method: POST
指定文档id插入数据:{ "name": "cyh", "country": "china", "age": 18, "date": "2020-01-23" }
插入成功之后浏览:
- 自动产生文档id插入
url: 127.0.0.1:9200/people/man method: POST
自动产生文档id插入数据:{ "name": "Romana", "country": "US", "age": 20, "date": "2020-01-24" }
插入成功之后浏览:
4、修改
直接修改文档
url: 127.0.0.1:9200/people/man/1/_update method: POST
{ { "doc": { "name": "lily" } } }
指定文档修改数据:
修改成功之后浏览:脚本修改文档
url: 127.0.0.1:9200/people/man/1/_update method: POST
{ "script": { "lang": "painless", "inline": "ctx._source.age += 10" } } 或 { "script": { "lang": "painless", "inline": "ctx._source.age = params.age", "params": { "age": 100 } } }
脚本修改数据:
修改成功之后浏览:
5、删除
- 删除文档
url: 127.0.0.1:9200/people/man/1 method: DELETE
- 删除索引
(1)通过接口删除
url: 127.0.0.1:9200/people
method: DELETE
(2)在浏览器上删除
6、查询
先创建book索引
url: 127.0.0.1:9200/book
method: PUT
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"novel": {
"properties": {
"word_count": {
"type": "integer"
},
"author": {
"type": "keyword"
},
"title": {
"type": "text"
},
"publish_date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
插入数据:
- 简单查询
1、查询索引中的一条数据:
url: 127.0.0.1:9200/book/novel/1
method: GET
2、所有数据的查询(默认显示前10条):
url: 127.0.0.1:9200/book/_search
method: POST
{
"query": {
"match_all": {}
}
}
- 条件查询
数据条数及偏移量查询:
{
"query": {
"match_all": {}
},
"from": 3, # 以一定的偏移量来查看我们检索的结果,缺省从检索的第一条数据开始显示
"size": 5 # 指定检索结果中输出的数据条数,缺省为10条
}
关键字查询:
{
"query": {
"match": {
"title": "ElasticSearch"
}
}
}
排序查询:
{
"query": {
"match_all": {}
},
"sort": [
{"publish_date": {"order": "desc"}}
]
}
- 聚合查询
单个字段聚合:
{
"aggs": {
"group_by_word_count": {
"terms": {
"field": "word_count"
}
},
"group_by_publish_date": {
"terms": {
"field": "publish_date"
}
}
}
}
字段统计聚合:
{
"aggs": {
"grades_word_count": {
"stats": {
"field": "word_count"
}
}
}
}
{
"aggs": {
"grades_word_count": {
"min": {
"field": "word_count"
}
}
}
}