文章目录
一、put、post、delete、get方法描述
method | 描述 |
---|---|
PUT | 创建 |
POST | 创建、修改 |
DELETE | 删除 |
GET | 查询 |
二、数据模型及核心概念
①数据模型
Index:索引,由多个Document组成 ,相当于关系型数据库中的数据库(database)
Type:索引类型,6.x中仅支持一个,以后将逐渐被移除,相当于关系型数据库中的表(tables)
Document:文档,由多个Field组成,相当于关系型数据库中的行(rows)
Field:字段,包括字段名与字段值,相当于关系型数据库中的字段(columns)
②Document管理:文档是ES最小数据单元
- 原始数据
_source:原始JSON格式文档 - 文档元数据
_index:索引名
_type:索引类型
_id:文档编号
_version:文档版本号用于并发控制
_score:在搜索结果中的评分
三、索引的基本操作
注意:索引前面的/可加可不加
1.创建一个索引
PUT /索引名/类型名/文档id {请求体}
例如:
PUT test/type/1
{
"name":"tom",
"interest":"play"
}
2.查看当前所有索引
GET _cat/indices
3.修改(更新)文档
方法一:(如果不传递值就会被覆盖)
#相同文档id提交可以实现覆盖完成修改
PUT /test/type/1
{
"name":"tom",
"interest":"learn"
}
方法二:(只需编辑更新的数据,灵活性更高)
POST /test/type/1/_update
{
"doc": {
"interest":"dance"
}
}
4.删除
#删除指定编号文档
DELETE test/type/1
#删除整个索引
DELETE test
5.添加数据
PUT test/type/1
{
"name":"tom",
"interest":"learn",
"gender":"male",
"age":"18"
}
6.批量操作数据 bulk
#批量操作步骤
PUT _bulk
{"index/create/update/delete":{"_index":"...","_type":"...","_id":"..."}}
{"field1":"value1",……}
#以插入数据为例
PUT _bulk
{"create":{"_index":"student01","_type":"student","_id":"1"}}
{"id":"1","name":"zhangsan","join_date":"2014","interest":"basketball"}
{"create":{"_index":"student01","_type":"student","_id":"2"}}
{"id":"2","name":"join","join_date":"2017","interest":"boxing"}
{"create":{"_index":"student01","_type":"student","_id":"3"}}
{"id":"3","name":"John Kerry","join_date":"2016","interest":"cooking"}
7.批量读取文档
方式一:
GET student01/student/_mget
{"docs":[{"_id":"1"},{"_id":"2"}]}
方式二:
GET student01/_mget
{"docs":[{"_type":"student","_id":"1"},{"_type":"student","_id":"2"}]}
方式三:(可读取不同索引的表)
GET _mget
{"docs":[{"_index":"student01","_type":"student","_id":"1"},{"_index":"test","_type":"type","_id":"1"}]}
8.搜索数据
1)简单查询
①搜索指定编号的数据
GET test/type/1/
②带条件的查询(当索引中含有多条数据时)
GET test/type/_search?q=name:tom
2)复杂查询
①match查询
- match_all:返回所有文档
GET test/_search
{
"query": {
"match_all": {}
}
}
- match:布尔匹配查询(对查询字符串进行分词,根据分词结果构造布尔查询)
GET student01/_search
{
"query": {
"match": {
"name":"John Kerry"
}
}
}
- match_phrase:短语匹配查询(对查询字符串进行分词,字段值必须依次匹配所有分词,注意各分词位置不能改变)
GET student01/_search
{
"query": {
"match_phrase": {
"name":"John Kerry"
}
}
}
- match_phrase_prefix:短语前缀匹配查询(类似match_phrase,但最后一个分词作为前缀匹配)
GET student01/_search
{
"query": {
"match_phrase_prefix": {
"name":"John Ke"
}
}
}
- multi_match:多字段匹配查询
GET student01/_search
{
"query": {
"multi_match": {
"query": "John like cooking",
"fields": ["name","interest"]
}
}
}
②term查询 (词条查询:按照存储在倒排索引中的确切字词,对字段进行匹配)
GET student01/_search
{
"query": {
"term":{
"name":"john" #注意值全部为小写
}
}
}
③terms查询 (词条查询:按照存储在倒排索引中的确切字词,对字段进行多词条匹配)
GET student01/_search
{ "query": {
"terms":{
"name":["john","da"] #注意值全部为小写
}
}
}
④range查询 (范围查询)
gt 大于
gte 大于等于
lt 小于
lte 小于等于!
GET student01/_search
{"query": {
"range" : {
"join_date" : {
"gte" : 2016,
"lte" : 2017
}
}
}
}
⑤fliter过滤器(filter是放在bool查询中的)
GET student01/_search
{"query": {
"bool": {
"filter": {
"range": {
"join_date": {
"gte": 2016
}
}
}
}
}
}
⑥sort排序
GET student01/_search
{"query": {
"match_all": {
}
},
"sort": {
"id":"desc"
}
}
⑦bool查询(复合查询子句)
- List itemmust 相当于sql查询where里面的and,所有的条件都要符合 where name = join and interest = xxx
- should 相当于sql查询where里面的or,所有的条件都要符合 where name = 1 or interest = xxx 【minimum_should_match 表示最小匹配的should条件】
- should 相当于sql查询where里面的 not
#请在学生信息索引“student01”中查询同时满足以下要求的文档
#姓名为“john”
#在2016年后入学
#爱好“boxing”
GET student01/student/_search
{"query":{
"bool": {
"must": [
{"match": {
"name.keyword": "join"
}},{
"match": {
"interest": "boxing"
}
}
],
"filter": {
"range": {
"join_date": {
"gte": 2016
}
}
}
}
}
}
四、分页
1.浅分页(from+size)
方法一:size:页面容量 from:数据下标是从0开始的,表示从第几个数据开始
GET student01/_search?size=5&from=2
方法二:
GET student01/_search
{
"query": {
"match_all": {}
},
"size": 5,
"from": 2
}
2.深分页
①返回scroll_id与第一页内容,scroll_id 5分钟有效
GET stu/_search?scroll=5m
{
"from": 0,
"size": 5,
"query": {"match_all": {}}
}
②根据scroll_id不断获取下一页内容
GET _search/scroll
{
"scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAANy……",
"scroll": "5m"
}