es的crud操作实战
GET
搜索请求体中常见参数解析
- query:定义搜索条件(如匹配哪些内容)。
- match: 匹配查询,用于对指定字段进行全文搜索,对指定字段进行分词后模糊匹配。
- _source: 用于指定搜索结果中返回的字段(过滤不需要的字段)。
- sort: 用于对搜索结果进行排序。
- size:指定从查询匹配的结果集中,返回前 N 条文档,要求N≥0,0 表示 “仅返回查询元数据(如总命中数),不返回任何文档”,若未指定size,则ES使用默认值10。
- term:匹配查询,单值精确匹配。
- terms:匹配查询,多值精确匹配。
- range:匹配查询,范围查询。
- match_phrase:短语匹配,不仅要求文档包含所有查询词项,还要求这些词项连续出现且保持原始顺序。
- from:分页参数,指定从第几条结果开始返回(起始位置,从 0 开始计数)。
- size:分页参数,指定从 from 位置开始,最多返回多少条结果(每页数据量)。
- must:布尔查询参数,强制满足,文档必须匹配所有 must 中的条件,否则直接排除,类似于and。
- should:布尔查询参数,非强制满足,文档可匹配部分 / 全部 should 条件,不匹配也可能被保留,类似于or。
- must_not:布尔查询参数,排除符合特定条件的文档,是must的反向逻辑。
- filter:布尔查询参数,必须满足某些条件,但这些条件不参与排序计算。
- highlight:在查询结果中突出显示匹配到搜索关键词的文本片段。
下面以创建的music索引为数据库演示查询操作。


排序操作
从 music 索引中找出所有发行年份为 2003 年的歌曲,仅返回歌曲名和歌手名,并按歌曲时长从长到短排序。
如果是多字段排序,则继续添加排序对象即可。
GET /music/_search
{
"query": {
"match": {
"releaseyear": 2003
}
},
"_source": ["name","singer"],
"sort": [
{
"length": {
"order": "desc"
}
}
]
}
查询结果
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 5,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "晴天",
"singer": "周杰伦"
},
"sort": [
269
]
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "东风破",
"singer": "周杰伦"
},
"sort": [
243
]
},
{
"_index": "music",
"_id": "cJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "说爱你",
"singer": "蔡依林"
},
"sort": [
228
]
},
{
"_index": "music",
"_id": "bJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "遇见",
"singer": "孙燕姿"
},
"sort": [
210
]
},
{
"_index": "music",
"_id": "Z579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "十年",
"singer": "陈奕迅"
},
"sort": [
205
]
}
]
}
}

查询所有索引中的所有文档
默认返回前 10 条。
GET _search
或者
GET _search
{
"query": {
"match_all": {} // match_all 表示匹配所有文档
}
}
查询结果
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 17,
"successful": 17,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 22,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "emperor",
"_id": "XJ70XJkBOIqdOt8ZPsRC",
"_score": 1,
"_source": {
"name": "李世民",
"dynasty": "唐朝",
"age": 51
}
},
{
"_index": "emperor",
"_id": "XZ70XJkBOIqdOt8ZP8Tr",
"_score": 1,
"_source": {
"name": "刘邦",
"dynasty": [
"秦朝",
"汉朝"
],
"age": 61
}
},
{
"_index": "emperor",
"_id": "X570XJkBOIqdOt8ZQMST",
"_score": 1,
"_source": {
"name": "乾隆",
"dynasty": "清朝",
"age": 89
}
},
{
"_index": "emperor",
"_id": "Xp70XJkBOIqdOt8ZQMQ_",
"_score": 1,
"_source": {
"name": "朱元璋",
"dynasty": [
"元朝",
"明朝"
]
}
},
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "YZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "双截棍",
"length": 202,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "爱在西元前",
"length": 256,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "晴天",
"length": 269,
"album": "叶惠美",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "东风破",
"length": 243,
"album": "惠美",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "七里香",
"length": 267,
"album": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2004,
"releasedate": "2004-08-03",
"singersex": "男歌手",
"language": "国语"
}
}
]
}
}

精确匹配
若需要完全匹配字段的原始值(不分词、不模糊),需使用 term(单值精确匹配)或 terms(多值精确匹配)。
适合非文本字段(如 age 数值、status 枚举)或已提前处理为 “不分词” 的文本字段(如 id、name 用 keyword 类型)。
- 在 music 索引中,找出所有 length(歌曲时长,单位秒)精确等于 283 的歌曲。
GET /music/_search
{
"query": {
"term": {
"length": 283
}
}
}
返回结果
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "aJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "浮夸",
"length": 283,
"album": "U87",
"lyricist": "黄伟文",
"composer": "江志仁",
"singer": "陈奕迅",
"releaseyear": 2005,
"releasedate": "2005-06-07",
"singersex": "男歌手",
"language": "粤语"
}
}
]
}
}

- 在 music 索引中,精确筛选出所有 singer(歌手) 字段值为 “周杰伦” 的文档。
singer 字段默认是 text 类型(会分词),但自动生成的 singer.keyword 是 keyword 类型(完整保留原始字符串,不分词)。
GET /music/_search
{
"query": {
"term": {
"singer.keyword": "周杰伦"
}
}
}
返回结果
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 7,
"relation": "eq"
},
"max_score": 0.92953587,
"hits": [
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 0.92953587,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "YZ79XJkBOIqdOt8Z4cR8",
"_score": 0.92953587,
"_source": {
"name": "双截棍",
"length": 202,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": 0.92953587,
"_source": {
"name": "爱在西元前",
"length": 256,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": 0.92953587,
"_source": {
"name": "晴天",
"length": 269,
"album": "叶惠美",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": 0.92953587,
"_source": {
"name": "东风破",
"length": 243,
"album": "惠美",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": 0.92953587,
"_source": {
"name": "七里香",
"length": 267,
"album": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2004,
"releasedate": "2004-08-03",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Zp79XJkBOIqdOt8Z4cR8",
"_score": 0.92953587,
"_source": {
"name": "青花瓷",
"length": 239,
"album": "我很忙",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2007,
"releasedate": "2007-11-02",
"singersex": "男歌手",
"language": "国语"
}
}
]
}
}

- 精确匹配 lyricist(作词者)字段值为 “周杰伦” 或 “方文山” 的所有文档。
GET /music/_search
{
"query": {
"terms": {
"lyricist.keyword": ["周杰伦", "方文山"]
}
}
}
返回结果
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 7,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "YZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "双截棍",
"length": 202,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "爱在西元前",
"length": 256,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "晴天",
"length": 269,
"album": "叶惠美",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "东风破",
"length": 243,
"album": "惠美",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "七里香",
"length": 267,
"album": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2004,
"releasedate": "2004-08-03",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Zp79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "青花瓷",
"length": 239,
"album": "我很忙",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2007,
"releasedate": "2007-11-02",
"singersex": "男歌手",
"language": "国语"
}
}
]
}
}

范围查询
若需要匹配 数值/日期 字段的某个范围,需使用 range 查询。
| 参数 | 含义 | 适用场景 |
|---|---|---|
| gt | 大于 | 数值、日期 |
| gte | 大于等于 | 数值、日期 |
| lt | 小于 | 数值、日期 |
| lte | 小于等于 | 数值、日期 |
| format | 日期格式,例如yyyy-MM-dd | 日期字段 |
- 在 music 索引中搜索 length 在 250 到 300 秒之间的歌曲。(包含250和300)
GET /music/_search
{
"query": {
"range": {
"length": {
"gte": 250,
"lte": 300
}
}
}
}
返回数据
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 8,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "爱在西元前",
"length": 256,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "晴天",
"length": 269,
"album": "叶惠美",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "七里香",
"length": 267,
"album": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2004,
"releasedate": "2004-08-03",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "aJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "浮夸",
"length": 283,
"album": "U87",
"lyricist": "黄伟文",
"composer": "江志仁",
"singer": "陈奕迅",
"releaseyear": 2005,
"releasedate": "2005-06-07",
"singersex": "男歌手",
"language": "粤语"
}
},
{
"_index": "music",
"_id": "aZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "富士山下",
"length": 260,
"album": "What's Going On...?",
"lyricist": "林夕",
"composer": "泽日生",
"singer": "陈奕迅",
"releaseyear": 2006,
"releasedate": "2006-11-23",
"singersex": "男歌手",
"language": "粤语"
}
},
{
"_index": "music",
"_id": "a579XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "江南",
"length": 267,
"album": "第二天堂",
"lyricist": "李瑞洵",
"composer": "林俊杰",
"singer": "林俊杰",
"releaseyear": 2004,
"releasedate": "2004-06-04",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "bZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "我怀念的",
"length": 287,
"album": "逆光",
"lyricist": "姚若龙",
"composer": "李偲菘",
"singer": "孙燕姿",
"releaseyear": 2007,
"releasedate": "2007-03-22",
"singersex": "女歌手",
"language": "国语"
}
}
]
}
}

- 在 music 索引中 搜索 releasedate 晚于 2005 年 1 月 1 日 的文档,format 用于指定日期格式
GET /music/_search
{
"query": {
"range": {
"releasedate": {
"gt": "2005-01-01",
"format": "yyyy-MM-dd"
}
}
}
}
返回数据
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "music",
"_id": "Zp79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "青花瓷",
"length": 239,
"album": "我很忙",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2007,
"releasedate": "2007-11-02",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "aJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "浮夸",
"length": 283,
"album": "U87",
"lyricist": "黄伟文",
"composer": "江志仁",
"singer": "陈奕迅",
"releaseyear": 2005,
"releasedate": "2005-06-07",
"singersex": "男歌手",
"language": "粤语"
}
},
{
"_index": "music",
"_id": "aZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "富士山下",
"length": 260,
"album": "What's Going On...?",
"lyricist": "林夕",
"composer": "泽日生",
"singer": "陈奕迅",
"releaseyear": 2006,
"releasedate": "2006-11-23",
"singersex": "男歌手",
"language": "粤语"
}
},
{
"_index": "music",
"_id": "ap79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "曹操",
"length": 242,
"album": "曹操",
"lyricist": "林秋离",
"composer": "林俊杰",
"singer": "林俊杰",
"releaseyear": 2006,
"releasedate": "2006-02-17",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "bZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "我怀念的",
"length": 287,
"album": "逆光",
"lyricist": "姚若龙",
"composer": "李偲菘",
"singer": "孙燕姿",
"releaseyear": 2007,
"releasedate": "2007-03-22",
"singersex": "女歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "b579XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "日不落",
"length": 227,
"album": "特务J",
"lyricist": "崔惟楷",
"composer": "Bard、Alexander Bengt Magnus、Anders Hansson",
"singer": "蔡依林",
"releaseyear": 2007,
"releasedate": "2007-09-21",
"singersex": "女歌手",
"language": "国语"
}
}
]
}
}

分页查询
- 匹配指定索引并分页、排序、过滤输出字段
GET /music/_search
{
"query": {
"match": {
"composer": "周杰伦"
}
},
"_source": ["name","singer"],
"sort": [
{
"length": {
"order": "desc"
}
}
],
"from":0,
"size":10
}
返回数据
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 11,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "music",
"_id": "cZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "谁明浪子心",
"singer": "王杰"
},
"sort": [
301
]
},
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "黑色幽默",
"singer": "周杰伦"
},
"sort": [
283
]
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "晴天",
"singer": "周杰伦"
},
"sort": [
269
]
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "七里香",
"singer": "周杰伦"
},
"sort": [
267
]
},
{
"_index": "music",
"_id": "a579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "江南",
"singer": "林俊杰"
},
"sort": [
267
]
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "爱在西元前",
"singer": "周杰伦"
},
"sort": [
256
]
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "东风破",
"singer": "周杰伦"
},
"sort": [
243
]
},
{
"_index": "music",
"_id": "ap79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "曹操",
"singer": "林俊杰"
},
"sort": [
242
]
},
{
"_index": "music",
"_id": "Zp79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "青花瓷",
"singer": "周杰伦"
},
"sort": [
239
]
},
{
"_index": "music",
"_id": "cJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "说爱你",
"singer": "蔡依林"
},
"sort": [
228
]
}
]
}
}

- 匹配所有索引并分页
GET /_search
{
"from": 0,
"size": 10,
"query": {
"match_all": {}
}
}
返回数据
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 17,
"successful": 17,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 22,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "emperor",
"_id": "XJ70XJkBOIqdOt8ZPsRC",
"_score": 1,
"_source": {
"name": "李世民",
"dynasty": "唐朝",
"age": 51
}
},
{
"_index": "emperor",
"_id": "XZ70XJkBOIqdOt8ZP8Tr",
"_score": 1,
"_source": {
"name": "刘邦",
"dynasty": [
"秦朝",
"汉朝"
],
"age": 61
}
},
{
"_index": "emperor",
"_id": "X570XJkBOIqdOt8ZQMST",
"_score": 1,
"_source": {
"name": "乾隆",
"dynasty": "清朝",
"age": 89
}
},
{
"_index": "emperor",
"_id": "Xp70XJkBOIqdOt8ZQMQ_",
"_score": 1,
"_source": {
"name": "朱元璋",
"dynasty": [
"元朝",
"明朝"
]
}
},
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "YZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "双截棍",
"length": 202,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "爱在西元前",
"length": 256,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "晴天",
"length": 269,
"album": "叶惠美",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "东风破",
"length": 243,
"album": "惠美",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": 1,
"_source": {
"name": "七里香",
"length": 267,
"album": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2004,
"releasedate": "2004-08-03",
"singersex": "男歌手",
"language": "国语"
}
}
]
}
}

- 匹配指定索引并分页
GET /music/_search
{
"from": 0,
"size": 2,
"query": {
"match": { "composer": "周杰伦" }
}
}
返回数据
{
"took": 16,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 11,
"relation": "eq"
},
"max_score": 2.2008734,
"hits": [
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 2.2008734,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "YZ79XJkBOIqdOt8Z4cR8",
"_score": 2.2008734,
"_source": {
"name": "双截棍",
"length": 202,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
}
]
}
}

布尔查询
- 在 music 索引中搜索既由周杰伦作词又由周杰伦作曲的歌曲,并指定了返回字段、排序方式和分页参数。
GET /music/_search
{
"query": {
"bool":{
"must":[
{
"match": {
"lyricist": "周杰伦"
}
},
{
"match": {
"composer": "周杰伦"
}
}
]
}
},
"_source": ["name","singer","lyricist","composer"],
"sort": [
{
"length": {
"order": "desc"
}
}
],
"from":0,
"size":10
}
返回数据
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "黑色幽默",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
283
]
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "晴天",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
269
]
}
]
}
}

- 在 music 索引中搜索周杰伦作词 或者 周杰伦作曲的歌曲,并指定了返回字段、排序方式和分页参数。
GET /music/_search
{
"query": {
"bool":{
"should":[
{
"match": {
"lyricist": "周杰伦"
}
},
{
"match": {
"composer": "周杰伦"
}
}
]
}
},
"_source": ["name","singer","lyricist","composer"],
"sort": [
{
"length": {
"order": "desc"
}
}
],
"from":0,
"size":10
}
返回数据
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 11,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "music",
"_id": "cZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "谁明浪子心",
"lyricist": "潘源良",
"composer": "王杰",
"singer": "王杰"
},
"sort": [
301
]
},
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "黑色幽默",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
283
]
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "晴天",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
269
]
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
267
]
},
{
"_index": "music",
"_id": "a579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "江南",
"lyricist": "李瑞洵",
"composer": "林俊杰",
"singer": "林俊杰"
},
"sort": [
267
]
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "爱在西元前",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
256
]
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "东风破",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
243
]
},
{
"_index": "music",
"_id": "ap79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "曹操",
"lyricist": "林秋离",
"composer": "林俊杰",
"singer": "林俊杰"
},
"sort": [
242
]
},
{
"_index": "music",
"_id": "Zp79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "青花瓷",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦"
},
"sort": [
239
]
},
{
"_index": "music",
"_id": "cJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "说爱你",
"lyricist": "天天",
"composer": "周杰伦",
"singer": "蔡依林"
},
"sort": [
228
]
}
]
}
}

- 在 music 索引中搜索非男歌手演唱的歌曲,并指定了返回字段、排序方式和分页参数。
如果must_not包含多个条件,则“任意满足一个即被排除”。
GET /music/_search
{
"query": {
"bool":{
"must_not":[
{
"term": {
"singersex": "男歌手"
}
}
]
}
},
"_source": ["name","singer"],
"sort": [
{
"length": {
"order": "desc"
}
}
],
"from":0,
"size":10
}
返回数据
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 18,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "music",
"_id": "cZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "谁明浪子心",
"singer": "王杰"
},
"sort": [
301
]
},
{
"_index": "music",
"_id": "bZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "我怀念的",
"singer": "孙燕姿"
},
"sort": [
287
]
},
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "黑色幽默",
"singer": "周杰伦"
},
"sort": [
283
]
},
{
"_index": "music",
"_id": "aJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "浮夸",
"singer": "陈奕迅"
},
"sort": [
283
]
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "晴天",
"singer": "周杰伦"
},
"sort": [
269
]
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "七里香",
"singer": "周杰伦"
},
"sort": [
267
]
},
{
"_index": "music",
"_id": "a579XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "江南",
"singer": "林俊杰"
},
"sort": [
267
]
},
{
"_index": "music",
"_id": "aZ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "富士山下",
"singer": "陈奕迅"
},
"sort": [
260
]
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "爱在西元前",
"singer": "周杰伦"
},
"sort": [
256
]
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": null,
"_source": {
"name": "东风破",
"singer": "周杰伦"
},
"sort": [
243
]
}
]
}
}

- 过滤操作,在 music 索引中搜索 歌曲语言为 “国语”、歌曲时长在 250 到 300 秒之间的歌曲。
gt:大于
gte:大于等于
lt:小于
lte:小于等于
GET /music/_search
{
"query": {
"bool":{
"must":[
{
"match": {
"language": "国语"
}
}
],
"filter":{
"range":{
"length":{
"gte":250,
"lte":300
}
}
}
}
}
}
返回数据
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 8,
"relation": "eq"
},
"max_score": 0.23026721,
"hits": [
{
"_index": "music",
"_id": "YJ79XJkBOIqdOt8Z4cR8",
"_score": 0.23026721,
"_source": {
"name": "黑色幽默",
"length": 283,
"album": "Jay",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2000,
"releasedate": "2000-11-07",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": 0.23026721,
"_source": {
"name": "爱在西元前",
"length": 256,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": 0.23026721,
"_source": {
"name": "晴天",
"length": 269,
"album": "叶惠美",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": 0.23026721,
"_source": {
"name": "七里香",
"length": 267,
"album": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2004,
"releasedate": "2004-08-03",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "a579XJkBOIqdOt8Z4cR8",
"_score": 0.23026721,
"_source": {
"name": "江南",
"length": 267,
"album": "第二天堂",
"lyricist": "李瑞洵",
"composer": "林俊杰",
"singer": "林俊杰",
"releaseyear": 2004,
"releasedate": "2004-06-04",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "bZ79XJkBOIqdOt8Z4cR8",
"_score": 0.23026721,
"_source": {
"name": "我怀念的",
"length": 287,
"album": "逆光",
"lyricist": "姚若龙",
"composer": "李偲菘",
"singer": "孙燕姿",
"releaseyear": 2007,
"releasedate": "2007-03-22",
"singersex": "女歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "aJ79XJkBOIqdOt8Z4cR8",
"_score": 0.026668247,
"_source": {
"name": "浮夸",
"length": 283,
"album": "U87",
"lyricist": "黄伟文",
"composer": "江志仁",
"singer": "陈奕迅",
"releaseyear": 2005,
"releasedate": "2005-06-07",
"singersex": "男歌手",
"language": "粤语"
}
},
{
"_index": "music",
"_id": "aZ79XJkBOIqdOt8Z4cR8",
"_score": 0.026668247,
"_source": {
"name": "富士山下",
"length": 260,
"album": "What's Going On...?",
"lyricist": "林夕",
"composer": "泽日生",
"singer": "陈奕迅",
"releaseyear": 2006,
"releasedate": "2006-11-23",
"singersex": "男歌手",
"language": "粤语"
}
}
]
}
}

多条件查询
在 music 索引中搜索 lyricist 包含 “方文山” 或 “林夕” 的歌曲。
GET /music/_search
{
"query": {
"match":{"lyricist":"方文山 林夕"}
}
}
返回数据
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 9,
"relation": "eq"
},
"max_score": 4.228615,
"hits": [
{
"_index": "music",
"_id": "Z579XJkBOIqdOt8Z4cR8",
"_score": 4.228615,
"_source": {
"name": "十年",
"length": 205,
"album": "黑・白・灰",
"lyricist": "林夕",
"composer": "陈小霞",
"singer": "陈奕迅",
"releaseyear": 2003,
"releasedate": "2003-04-15",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "aZ79XJkBOIqdOt8Z4cR8",
"_score": 4.228615,
"_source": {
"name": "富士山下",
"length": 260,
"album": "What's Going On...?",
"lyricist": "林夕",
"composer": "泽日生",
"singer": "陈奕迅",
"releaseyear": 2006,
"releasedate": "2006-11-23",
"singersex": "男歌手",
"language": "粤语"
}
},
{
"_index": "music",
"_id": "YZ79XJkBOIqdOt8Z4cR8",
"_score": 3.4685504,
"_source": {
"name": "双截棍",
"length": 202,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Yp79XJkBOIqdOt8Z4cR8",
"_score": 3.4685504,
"_source": {
"name": "爱在西元前",
"length": 256,
"album": "范特西",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2001,
"releasedate": "2001-09-20",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": 3.4685504,
"_source": {
"name": "东风破",
"length": 243,
"album": "惠美",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ZZ79XJkBOIqdOt8Z4cR8",
"_score": 3.4685504,
"_source": {
"name": "七里香",
"length": 267,
"album": "七里香",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2004,
"releasedate": "2004-08-03",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "Zp79XJkBOIqdOt8Z4cR8",
"_score": 3.4685504,
"_source": {
"name": "青花瓷",
"length": 239,
"album": "我很忙",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2007,
"releasedate": "2007-11-02",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "ap79XJkBOIqdOt8Z4cR8",
"_score": 1.6519237,
"_source": {
"name": "曹操",
"length": 242,
"album": "曹操",
"lyricist": "林秋离",
"composer": "林俊杰",
"singer": "林俊杰",
"releaseyear": 2006,
"releasedate": "2006-02-17",
"singersex": "男歌手",
"language": "国语"
}
},
{
"_index": "music",
"_id": "aJ79XJkBOIqdOt8Z4cR8",
"_score": 1.0474312,
"_source": {
"name": "浮夸",
"length": 283,
"album": "U87",
"lyricist": "黄伟文",
"composer": "江志仁",
"singer": "陈奕迅",
"releaseyear": 2005,
"releasedate": "2005-06-07",
"singersex": "男歌手",
"language": "粤语"
}
}
]
}
}

高亮查询
- 默认高亮查询
GET /music/_search
{
"query": {
"match":{"album":"The Moment"}
},
"highlight":{
"fields":{
"album":{}
}
}
}

- 自定义高亮查询
GET /music/_search
{
"query": {
"match":{"album":"The Moment"}
},
"highlight":{
"pre_tags":"<p class='gaoliang'>",
"post_tags":"</p>",
"fields":{
"album":{}
}
}
}

- 多条件多字段自定义高亮查询
GET /music/_search
{
"query": {
"bool": {
"must": [
// 多条件1:发行年份为2003(数值类型,用于筛选,不参与高亮)
{ "term": { "releaseyear": 2003 } },
// 多条件2:歌曲语言为国语(text类型,参与高亮,需匹配字段内容)
{ "match": { "language": "国语" } },
// 多条件3:可选-增加歌手名/歌名的匹配(确保高亮字段有关键词重叠)
{ "match": { "singer": "周杰伦" } }
]
}
},
"highlight": {
// 1. 自定义高亮标签(替换默认的<em>)
"pre_tags": "<p class='gaoliang'>",
"post_tags": "</p>",
// 2. 配置需要高亮的多字段(均为text类型)
"fields": {
"name": {}, // 高亮:歌曲名
"singer": {}, // 高亮:歌手名
"lyricist": {}, // 高亮:作词者
"language": {} // 高亮:歌曲语言(可选,因查询条件包含“国语”)
}
}
}
返回数据
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 3.6636205,
"hits": [
{
"_index": "music",
"_id": "Y579XJkBOIqdOt8Z4cR8",
"_score": 3.6636205,
"_source": {
"name": "晴天",
"length": 269,
"album": "叶惠美",
"lyricist": "周杰伦",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
},
"highlight": {
"singer": [
"<p class='gaoliang'>周</p><p class='gaoliang'>杰</p><p class='gaoliang'>伦</p>"
],
"language": [
"<p class='gaoliang'>国</p><p class='gaoliang'>语</p>"
]
}
},
{
"_index": "music",
"_id": "ZJ79XJkBOIqdOt8Z4cR8",
"_score": 3.6636205,
"_source": {
"name": "东风破",
"length": 243,
"album": "惠美",
"lyricist": "方文山",
"composer": "周杰伦",
"singer": "周杰伦",
"releaseyear": 2003,
"releasedate": "2003-07-31",
"singersex": "男歌手",
"language": "国语"
},
"highlight": {
"singer": [
"<p class='gaoliang'>周</p><p class='gaoliang'>杰</p><p class='gaoliang'>伦</p>"
],
"language": [
"<p class='gaoliang'>国</p><p class='gaoliang'>语</p>"
]
}
}
]
}
}
聚合查询
- 按 language 字段进行分组统计,统计每个 language 分组下的文档数量,
其中 lang 是聚合名称,可以自定义,但要符合规范;terms表示按什么字段进行分组,field指定具体的分组字段。
GET /music/_search
{
"size":0,
"aggs":{
"lang":{
"terms":{
"field":"language.keyword"
}
}
}
}

- 嵌套聚合查询,先按 language 字段分组统计,然后计算每个分组中 length 字段的平均值。
GET /music/_search
{
"size":0,
"aggs":{
"lang":{
"terms":{
"field":"language.keyword"
},
"aggs":{
"length_avg":{
"avg":{
"field":"length"
}
}
}
}
}
}

- 对 music 索引的 _doc 类型文档进行多维度统计分析,先按 language 字段进行分组,然后计算每个分组中 length 字段的平均值、最大值、最小值、总和。
GET /music/_search
{
"size":0,
"aggs":{
"lang":{
"terms":{
"field":"language.keyword"
},
"aggs":{
"length_avg":{
"avg":{
"field":"length"
}
},
"length_max":{
"max":{
"field":"length"
}
},
"length_min":{
"min":{
"field":"length"
}
},
"length_sum":{
"sum":{
"field":"length"
}
}
}
}
}
}
返回数据
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 18,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"lang": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "国语",
"doc_count": 15,
"length_avg": {
"value": 242.6
},
"length_max": {
"value": 287
},
"length_min": {
"value": 202
},
"length_sum": {
"value": 3639
}
},
{
"key": "粤语",
"doc_count": 3,
"length_avg": {
"value": 281.3333333333333
},
"length_max": {
"value": 301
},
"length_min": {
"value": 260
},
"length_sum": {
"value": 844
}
}
]
}
}
}

- 使用直方图(histogram)聚合对 length 进行区间分组,并计算每个区间内的平均时长。
GET /music/_search
{
"size":0,
"aggs":{
"length_range":{
"histogram":{
"field":"length",
"interval":30
},
"aggs":{
"length_avg":{
"avg":{
"field":"length"
}
}
}
}
}
}
返回数据
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 18,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"length_range": {
"buckets": [
{
"key": 180,
"doc_count": 2,
"length_avg": {
"value": 203.5
}
},
{
"key": 210,
"doc_count": 5,
"length_avg": {
"value": 223.6
}
},
{
"key": 240,
"doc_count": 7,
"length_avg": {
"value": 257.7142857142857
}
},
{
"key": 270,
"doc_count": 3,
"length_avg": {
"value": 284.3333333333333
}
},
{
"key": 300,
"doc_count": 1,
"length_avg": {
"value": 301
}
}
]
}
}
}

- 使用了 date_histogram 聚合,用于按月份统计 music 索引中歌曲的发行时间分布。
GET /music/_search
{
"size":0,
"aggs":{
"sales":{
"date_histogram":{
"field":"releaseDate", //按 releaseDate(发行日期)字段进行时间分组
"calendar_interval":"month", //按月份间隔分组
"format":"yyyy-MM-dd", //指定日期显示格式
"min_doc_count":0, //即使某个月份没有数据,也会显示该月份(默认只显示有数据的区间)
"extended_bounds":{ //定义了统计的时间范围(包含边界)
"min":"2002-01-01",
"max":"2007-01-01"
}
}
}
}
}
返回数据
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 18,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"sales": {
"buckets": [
{
"key_as_string": "2002-01-01",
"key": 1009843200000,
"doc_count": 0
},
{
"key_as_string": "2002-02-01",
"key": 1012521600000,
"doc_count": 0
},
{
"key_as_string": "2002-03-01",
"key": 1014940800000,
"doc_count": 0
},
{
"key_as_string": "2002-04-01",
"key": 1017619200000,
"doc_count": 0
},
{
"key_as_string": "2002-05-01",
"key": 1020211200000,
"doc_count": 0
},
{
"key_as_string": "2002-06-01",
"key": 1022889600000,
"doc_count": 0
},
{
"key_as_string": "2002-07-01",
"key": 1025481600000,
"doc_count": 0
},
{
"key_as_string": "2002-08-01",
"key": 1028160000000,
"doc_count": 0
},
{
"key_as_string": "2002-09-01",
"key": 1030838400000,
"doc_count": 0
},
{
"key_as_string": "2002-10-01",
"key": 1033430400000,
"doc_count": 0
},
{
"key_as_string": "2002-11-01",
"key": 1036108800000,
"doc_count": 0
},
{
"key_as_string": "2002-12-01",
"key": 1038700800000,
"doc_count": 0
},
{
"key_as_string": "2003-01-01",
"key": 1041379200000,
"doc_count": 0
},
{
"key_as_string": "2003-02-01",
"key": 1044057600000,
"doc_count": 0
},
{
"key_as_string": "2003-03-01",
"key": 1046476800000,
"doc_count": 0
},
{
"key_as_string": "2003-04-01",
"key": 1049155200000,
"doc_count": 0
},
{
"key_as_string": "2003-05-01",
"key": 1051747200000,
"doc_count": 0
},
{
"key_as_string": "2003-06-01",
"key": 1054425600000,
"doc_count": 0
},
{
"key_as_string": "2003-07-01",
"key": 1057017600000,
"doc_count": 0
},
{
"key_as_string": "2003-08-01",
"key": 1059696000000,
"doc_count": 0
},
{
"key_as_string": "2003-09-01",
"key": 1062374400000,
"doc_count": 0
},
{
"key_as_string": "2003-10-01",
"key": 1064966400000,
"doc_count": 0
},
{
"key_as_string": "2003-11-01",
"key": 1067644800000,
"doc_count": 0
},
{
"key_as_string": "2003-12-01",
"key": 1070236800000,
"doc_count": 0
},
{
"key_as_string": "2004-01-01",
"key": 1072915200000,
"doc_count": 0
},
{
"key_as_string": "2004-02-01",
"key": 1075593600000,
"doc_count": 0
},
{
"key_as_string": "2004-03-01",
"key": 1078099200000,
"doc_count": 0
},
{
"key_as_string": "2004-04-01",
"key": 1080777600000,
"doc_count": 0
},
{
"key_as_string": "2004-05-01",
"key": 1083369600000,
"doc_count": 0
},
{
"key_as_string": "2004-06-01",
"key": 1086048000000,
"doc_count": 0
},
{
"key_as_string": "2004-07-01",
"key": 1088640000000,
"doc_count": 0
},
{
"key_as_string": "2004-08-01",
"key": 1091318400000,
"doc_count": 0
},
{
"key_as_string": "2004-09-01",
"key": 1093996800000,
"doc_count": 0
},
{
"key_as_string": "2004-10-01",
"key": 1096588800000,
"doc_count": 0
},
{
"key_as_string": "2004-11-01",
"key": 1099267200000,
"doc_count": 0
},
{
"key_as_string": "2004-12-01",
"key": 1101859200000,
"doc_count": 0
},
{
"key_as_string": "2005-01-01",
"key": 1104537600000,
"doc_count": 0
},
{
"key_as_string": "2005-02-01",
"key": 1107216000000,
"doc_count": 0
},
{
"key_as_string": "2005-03-01",
"key": 1109635200000,
"doc_count": 0
},
{
"key_as_string": "2005-04-01",
"key": 1112313600000,
"doc_count": 0
},
{
"key_as_string": "2005-05-01",
"key": 1114905600000,
"doc_count": 0
},
{
"key_as_string": "2005-06-01",
"key": 1117584000000,
"doc_count": 0
},
{
"key_as_string": "2005-07-01",
"key": 1120176000000,
"doc_count": 0
},
{
"key_as_string": "2005-08-01",
"key": 1122854400000,
"doc_count": 0
},
{
"key_as_string": "2005-09-01",
"key": 1125532800000,
"doc_count": 0
},
{
"key_as_string": "2005-10-01",
"key": 1128124800000,
"doc_count": 0
},
{
"key_as_string": "2005-11-01",
"key": 1130803200000,
"doc_count": 0
},
{
"key_as_string": "2005-12-01",
"key": 1133395200000,
"doc_count": 0
},
{
"key_as_string": "2006-01-01",
"key": 1136073600000,
"doc_count": 0
},
{
"key_as_string": "2006-02-01",
"key": 1138752000000,
"doc_count": 0
},
{
"key_as_string": "2006-03-01",
"key": 1141171200000,
"doc_count": 0
},
{
"key_as_string": "2006-04-01",
"key": 1143849600000,
"doc_count": 0
},
{
"key_as_string": "2006-05-01",
"key": 1146441600000,
"doc_count": 0
},
{
"key_as_string": "2006-06-01",
"key": 1149120000000,
"doc_count": 0
},
{
"key_as_string": "2006-07-01",
"key": 1151712000000,
"doc_count": 0
},
{
"key_as_string": "2006-08-01",
"key": 1154390400000,
"doc_count": 0
},
{
"key_as_string": "2006-09-01",
"key": 1157068800000,
"doc_count": 0
},
{
"key_as_string": "2006-10-01",
"key": 1159660800000,
"doc_count": 0
},
{
"key_as_string": "2006-11-01",
"key": 1162339200000,
"doc_count": 0
},
{
"key_as_string": "2006-12-01",
"key": 1164931200000,
"doc_count": 0
},
{
"key_as_string": "2007-01-01",
"key": 1167609600000,
"doc_count": 0
}
]
}
}
}

- 先筛选出 language 为 "粤语" 的文档,再对筛选结果按 language 进行分组统计。
GET /music/_search
{
"size":0,
"query":{
"match":{
"language":"粤语"
}
},
"aggs":{
"lang":{
"terms":{
"field":"language.keyword"
}
}
}
}

- 先按 language 字段分组,对每个 language 分组计算平均时长,每个 language 的平均时长 降序 排列分组结果。
GET /music/_search
{
"size": 0,
"aggs": {
"group_by_language": {
"terms": {
"field": "language.keyword",
"order": {
"length_avg": "desc"
}
},
"aggs": {
"length_avg": {
"avg": {
"field": "length"
}
}
}
}
}
}

SQL查询
ES同样支持通过SQL的方式进行查询,响应数据如下图所示。

在使用SQL查询时,需要注意一种情况,如果如果索引的某个字段是一个数组类型,那么在查询的时候不能使用*,否则会报错,因为Es SQL 不支持直接查询数据类型的字段,如下所示,dynasty是一个数组字段,如果直接使用SELECT * 便会报右边窗口的错误。


此时可以通过指定查询字段的方式查询,但查询的字段不能包括数组字段,如果确实需要数组字段的数据,就不要用SQL的方式,改为用ES 原生的 _search API。


- 常用格式
json格式:
POST /_sql?format=json
{
"query":"SELECT * from music"
}
返回数据:
{
"columns": [
{
"name": "album",
"type": "text"
},
{
"name": "composer",
"type": "text"
},
{
"name": "language",
"type": "text"
},
{
"name": "length",
"type": "long"
},
{
"name": "lyricist",
"type": "text"
},
{
"name": "name",
"type": "text"
},
{
"name": "releasedate",
"type": "datetime"
},
{
"name": "releaseyear",
"type": "long"
},
{
"name": "singer",
"type": "text"
},
{
"name": "singersex",
"type": "text"
}
],
"rows": [
[
"Jay",
"周杰伦",
"国语",
283,
"周杰伦",
"黑色幽默",
"2000-11-07T00:00:00.000Z",
2000,
"周杰伦",
"男歌手"
],
[
"范特西",
"周杰伦",
"国语",
202,
"方文山",
"双截棍",
"2001-09-20T00:00:00.000Z",
2001,
"周杰伦",
"男歌手"
],
[
"范特西",
"周杰伦",
"国语",
256,
"方文山",
"爱在西元前",
"2001-09-20T00:00:00.000Z",
2001,
"周杰伦",
"男歌手"
],
[
"叶惠美",
"周杰伦",
"国语",
269,
"周杰伦",
"晴天",
"2003-07-31T00:00:00.000Z",
2003,
"周杰伦",
"男歌手"
],
[
"惠美",
"周杰伦",
"国语",
243,
"方文山",
"东风破",
"2003-07-31T00:00:00.000Z",
2003,
"周杰伦",
"男歌手"
],
[
"七里香",
"周杰伦",
"国语",
267,
"方文山",
"七里香",
"2004-08-03T00:00:00.000Z",
2004,
"周杰伦",
"男歌手"
],
[
"我很忙",
"周杰伦",
"国语",
239,
"方文山",
"青花瓷",
"2007-11-02T00:00:00.000Z",
2007,
"周杰伦",
"男歌手"
],
[
"黑・白・灰",
"陈小霞",
"国语",
205,
"林夕",
"十年",
"2003-04-15T00:00:00.000Z",
2003,
"陈奕迅",
"男歌手"
],
[
"U87",
"江志仁",
"粤语",
283,
"黄伟文",
"浮夸",
"2005-06-07T00:00:00.000Z",
2005,
"陈奕迅",
"男歌手"
],
[
"What's Going On...?",
"泽日生",
"粤语",
260,
"林夕",
"富士山下",
"2006-11-23T00:00:00.000Z",
2006,
"陈奕迅",
"男歌手"
],
[
"曹操",
"林俊杰",
"国语",
242,
"林秋离",
"曹操",
"2006-02-17T00:00:00.000Z",
2006,
"林俊杰",
"男歌手"
],
[
"第二天堂",
"林俊杰",
"国语",
267,
"李瑞洵",
"江南",
"2004-06-04T00:00:00.000Z",
2004,
"林俊杰",
"男歌手"
],
[
"The Moment",
"林一峰",
"国语",
210,
"易家扬",
"遇见",
"2003-08-22T00:00:00.000Z",
2003,
"孙燕姿",
"女歌手"
],
[
"逆光",
"李偲菘",
"国语",
287,
"姚若龙",
"我怀念的",
"2007-03-22T00:00:00.000Z",
2007,
"孙燕姿",
"女歌手"
],
[
"城堡",
"Savan Kotecha、Andrew Marcus Frampton、Wayne Wilkins",
"国语",
214,
"胡如虹",
"爱情36计",
"2004-02-27T00:00:00.000Z",
2004,
"蔡依林",
"女歌手"
],
[
"特务J",
"Bard、Alexander Bengt Magnus、Anders Hansson",
"国语",
227,
"崔惟楷",
"日不落",
"2007-09-21T00:00:00.000Z",
2007,
"蔡依林",
"女歌手"
],
[
"看我72变",
"周杰伦",
"国语",
228,
"天天",
"说爱你",
"2003-03-07T00:00:00.000Z",
2003,
"蔡依林",
"女歌手"
],
[
"谁明浪子心",
"王杰",
"粤语",
301,
"潘源良",
"谁明浪子心",
"1989-08-31T00:00:00.000Z",
1989,
"王杰",
"男歌手"
]
]
}

txt格式
POST /_sql?format=txt
{
"query":"SELECT * from music"
}

csv格式
POST /_sql?format=csv
{
"query":"SELECT * from music"
}

tsv格式
POST /_sql?format=tsv
{
"query":"SELECT * from music"
}

yaml格式
POST /_sql?format=yaml
{
"query":"SELECT * from music"
}

- 过滤查询
模糊查询:
POST /_sql?format=json
{
"query":"SELECT * from music where singer like '%杰%'"
}

如果字段是text类型,会被分词,使用like查询该字段时会报错,like操作符需要字段支持精准匹配(通常需要keyword类型)。
POST /_sql?format=txt
{
"query":"SELECT name,age from emperor_new where dynasty like '%朝%'"
}

如果想要text类型字段能用SQL API模糊查询,可以安装NLPChina插件试下。
插件地址:https://github.com/NLPchina/elasticsearch-sql/
下载的版本保持和es版本对齐即可,由于我当前es的版本是8.19.3,但该插件没找到对应的版本,所以就不下载了。
安装之后将查询方式改下即可

POST
单个插入
向 emperor 索引创建文档。
POST /emperor/_doc
{
"name":"李世民",
"dynasty":"唐朝",
"age":51
}
POST /emperor/_doc
{
"name":"刘邦",
"dynasty":["秦朝","汉朝"],
"age":61
}
POST /emperor/_doc
{
"name":"朱元璋",
"dynasty":"明朝",
"age":70
}
POST /emperor/_doc
{
"name":"乾隆",
"dynasty":"清朝",
"age":89
}

批量插入
POST /music/_bulk
{"index":{}}
{"name": "黑色幽默", "length":283,"album":"Jay","lyricist":"周杰伦","composer":"周杰伦", "singer":"周杰伦","releaseyear":2000, "releasedate":"2000-11-07","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "双截棍", "length":202,"album":"范特西","lyricist":"方文山","composer":"周杰伦", "singer":"周杰伦","releaseyear":2001,"releasedate":"2001-09-20","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "爱在西元前", "length":256,"album":"范特西","lyricist":"方文山","composer":"周杰伦", "singer":"周杰伦","releaseyear":2001,"releasedate":"2001-09-20","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "晴天", "length":269,"album":"叶惠美","lyricist":"周杰伦","composer":"周杰伦", "singer":"周杰伦","releaseyear":2003,"releasedate":"2003-07-31","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "东风破", "length":243,"album":"惠美","lyricist":"方文山","composer":"周杰伦", "singer":"周杰伦","releaseyear":2003,"releasedate":"2003-07-31","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "七里香", "length":267,"album":"七里香","lyricist":"方文山","composer":"周杰伦", "singer":"周杰伦","releaseyear":2004,"releasedate":"2004-08-03","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "青花瓷", "length":239,"album":"我很忙","lyricist":"方文山","composer":"周杰伦", "singer":"周杰伦","releaseyear":2007,"releasedate":"2007-11-02","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "十年", "length":205,"album":"黑・白・灰","lyricist":"林夕","composer":"陈小霞", "singer":"陈奕迅","releaseyear":2003,"releasedate":"2003-04-15","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "浮夸", "length":283,"album":"U87","lyricist":"黄伟文","composer":"江志仁", "singer":"陈奕迅","releaseyear":2005,"releasedate":"2005-06-07","singersex":"男歌手","language":"粤语"}
{"index":{}}
{"name": "富士山下", "length":260,"album":"What's Going On...?","lyricist":"林夕","composer":"泽日生", "singer":"陈奕迅","releaseyear":2006,"releasedate":"2006-11-23","singersex":"男歌手","language":"粤语"}
{"index":{}}
{"name": "曹操", "length":242,"album":"曹操","lyricist":"林秋离","composer":"林俊杰", "singer":"林俊杰","releaseyear":2006,"releasedate":"2006-02-17","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "江南", "length":267,"album":"第二天堂","lyricist":"李瑞洵","composer":"林俊杰", "singer":"林俊杰","releaseyear":2004,"releasedate":"2004-06-04","singersex":"男歌手","language":"国语"}
{"index":{}}
{"name": "遇见", "length":210,"album":"The Moment","lyricist":"易家扬","composer":"林一峰", "singer":"孙燕姿","releaseyear":2003,"releasedate":"2003-08-22","singersex":"女歌手","language":"国语"}
{"index":{}}
{"name": "我怀念的", "length":287,"album":"逆光","lyricist":"姚若龙","composer":"李偲菘", "singer":"孙燕姿","releaseyear":2007,"releasedate":"2007-03-22","singersex":"女歌手","language":"国语"}
{"index":{}}
{"name": "爱情36计", "length":214,"album":"城堡","lyricist":"胡如虹","composer":"Savan Kotecha、Andrew Marcus Frampton、Wayne Wilkins", "singer":"蔡依林","releaseyear":2004,"releasedate":"2004-02-27","singersex":"女歌手","language":"国语"}
{"index":{}}
{"name": "日不落", "length":227,"album":"特务J","lyricist":"崔惟楷","composer":"Bard、Alexander Bengt Magnus、Anders Hansson", "singer":"蔡依林","releaseyear":2007,"releasedate":"2007-09-21","singersex":"女歌手","language":"国语"}
{"index":{}}
{"name": "说爱你", "length":228,"album":"看我72变","lyricist":"天天","composer":"周杰伦", "singer":"蔡依林","releaseyear":2003,"releasedate":"2003-03-07","singersex":"女歌手","language":"国语"}
{"index":{}}
{"name": "谁明浪子心", "length":301,"album":"谁明浪子心","lyricist":"潘源良","composer":"王杰", "singer":"王杰","releaseyear":1989,"releasedate":"1989-08-31","singersex":"男歌手","language":"粤语"}

PUT
更新索引中的文档
向索引 emperor 中的文档ID值1进行添加或更新文档的操作,若ID值1已存在则更新文档,若不存在则创建文档。
每次执行PUT命令时,返回对象的_version字段都会自增+1,首次执行时返回的是1。
PUT /emperor/_doc/Xp70XJkBOIqdOt8ZQMQ_
{
"name":"朱元璋",
"dynasty":["元朝","明朝"]
}

DELETE
删除索引
- 删除单个索引
DELETE /index_name
- 删除多个索引
DELETE /index1,index2,index3

- 删除所有索引
DELETE /_all
# 或者
DELETE /*
删除索引中的文档
向索引 emperor 中的文档ID值1进行删除操作。
- 如果ID为1的文档存在:会删除该文档,返回结果中 found 字段为 true,且 _version 会在当前版本号基础上加 1(即使删除也会递增版本)
- 如果ID为1的文档不存在:返回结果中 found 字段为 false,_version 仍会加 1。
DELETE /emperor/_doc/1

浙公网安备 33010602011771号