文档
思维导图
基本要素
ES是一个文档型数据库,在与传统的关系型数据库上,存在着一定的差异。下面将ES里面涉及到的元素与关系型数据库进行一一对应。
ElasticSearch | 索引(index) | 类型(type) | 文档(document) | 字段(field) |
---|---|---|---|---|
MySQL | 数据库(database) | 数据表(table) | 数据行(row) | 数据列(column) |
索引操作
1. 创建索引
PUT test0526
返回
{
"acknowledged": true,//响应结果
"shards_acknowledged": true,//分片结果
"index": "shopping"//索引名称
}
2. 查询索引
{
"test0525": {//索引名
"aliases": {},//别名
"mappings": {//映射
"doc": {
"dynamic_templates": [
{
"message_full": {
"match_mapping_type": "string",
"mapping": {
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
}
}
},
{
"message_long_as_double": {
"match": "member*",
"match_mapping_type": "long",
"mapping": {
"type": "double"
}
}
}
],
"properties": {
"category": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"group": {
"type": "long"
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
},
"settings": {//设置
"index": {
"refresh_interval": "10s",
"number_of_shards": "5",
"provided_name": "test0525",
"creation_date": "1684985637599",
"number_of_replicas": "1",
"uuid": "F3t6BIqeRrqFt7ZsP4UdUA",
"version": {
"created": "6040399"
}
}
}
}
}
3. 查看所有索引
GET _cat/indices
4. 删除索引
DELETE test0526
5. 文档创建/添加数据
POST test0525/doc
{
"title": "小米手机2",
"category": "小米",
"group":[1,2]
}
返回
{
"_index": "test0525",//索引
"_type": "doc",//类型-文档
"_id": "PT12UogBOGgFZNxa0wAZ",//唯一标识,可以类比为 MySQL 中的主键,随机生成
"_version": 1,//版本
"result": "created",//结果,这里的 create 表示创建成功
"_shards": {
"total": 2,//分片 - 总数
"successful": 2,//分片 - 总数
"failed": 0//分片 - 总数
},
"_seq_no": 1,
"_primary_term": 1
}
6. 自定义插入id
POST test0525/doc/user_72
{
"title": "小米手机2",
"category": "小米",
"group":[1,2]
}
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test0525",
"_type": "doc",
"_id": "user_72",//自定义的id
"_score": 1,
"_source": {
"title": "小米手机2",
"category": "小米",
"group": [
1,
2
]
}
}
]
}
}
7. 通过唯一标识查询
GET test0525/doc/user_72
{
"_index": "test0525",
"_type": "doc",
"_id": "user_72",
"_version": 2,
"found": true,
"_source": {
"title": "小米手机2",
"category": "小米",
"group": [
1,
2
]
}
}
8. 查询关系
- `must` 表示查询结果必须满足该条件,类似于“AND”操作符。
- `should` 表示查询结果应该满足该条件,但不是必须,类似于“OR”操作符。
- `must_not` 表示查询结果必须不满足该条件,相当于取反操作。
9. 查询关键字
`match`:查询文本包含指定关键词的文档
`term`:查询指定字段包含指定值的文档
`range`:查询指定字段在指定范围内的文档
`exists`:查询指定字段存在的文档
`bool`:组合多个查询条件,支持 `must`、`should`、`must_not` 条件关系
`wildcard`:通配符查询
`prefix`:前缀查询
`regexp`:正则表达式查询
`fuzzy`:模糊查询
`match_phrase`:查询文本包含指定关键词短语的文档
`query_string`:查询字符串查询,支持关键词查询和 Lucene 查询语法
10. 计算
`sum`:计算指定字段的和
`avg`:计算指定字段的平均值
`max`:计算指定字段的最大值
`min`:计算指定字段的最小值
`cardinality`:计算指定字段的基数(不重复值的数量)
`percentiles`:计算指定字段值的百分位数
`stats`:计算指定字段的统计信息,包括 count、min、max、avg、sum 等
`extended_stats`:在 `stats` 基础上,还计算字段的标准差、方差、标准误差等
`geo_bounds`:计算指定地理坐标字段的边界框
`geo_centroid`:计算指定地理坐标字段的质心坐标
11. 复杂查询(请求体查询)
11.1. 任意字符匹配 match
GET test0525/_search
{
"query": {
"match": {
"title": "荣耀"
}
}
}
//查询结果包含"荣"或者"耀"
11.2. 完全字符匹配
GET test0525/_search
{
"query": {
"match_phrase": {
"title": "荣耀"
}
}
}
//查询结果包含"荣耀"
11.3. 查询所有
GET test0525/_search
{
"query": {
"match_all": {
}
}
}
11.4. 分页查询&排序
GET test0525/_search
{
"query": {
"match_all": {}
},
"size": 2,
"from": 0,
"sort": [
{
"_id": {
"order": "desc"
}
}
]
}
11.5. 多条件查询
GET test0525/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"category": "华为"
}
},
{
"match_phrase": {
"title": "荣耀"
}
}
],
"must_not": [
{
"match": {
"category": "小米"
}
}
]
}
}
}
11.6. 范围查询
## gt 大于 gte 大于等于 lt 小于 lte 小于等于
GET test0525/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte": 5,
"lt": 7
}
}
}
]
}
}
}
11.7. 分组查询
//同时包含2 和 3的
GET test0525/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"group": 3
}
},
{
"term": {
"group": 2
}
}
]
}
}
}
//任意包含
GET test0525/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"group": [
2,
3
]
}
}
]
}
}
}
11.8. 计算-平均值/最大值/最小值
GET test0525/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"group": [
2
]
}
}
]
}
},
"aggs": {
"avg_age": {//自定义显示名称
"avg": {//计算类型 avg 平均值 min 最小值 max最大值
"field": "age"
}
}
}
}
11.9. 字段存在
GET test0525/_search
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "age"
}
}
]
}
}
}
11.10. 模糊查询
GET test0525/_search
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"title.keyword": "*小米*"//不带keyword会对查询条件进行分词查询,获取结果不准确
}
}
]
}
}
}
12. 删除文档
DELETE test0526/doc/1
13. 文档更新
13.1. 全量修改
POST test0525/doc/user_72
{
"title": "小米手机8",
"category": "小米",
"group":[1,2]
}
13.2. 局部更新
POST test0525/doc/user_72
{
"category": "小米8",
}