POST 请求是没有幂等性的,PUT请求是有幂等性的

查看集群状态

GET /_cat/health?v

GET /_cluster/health?v

查看集群节点列表

GET /_cat/nodes?v

查看所有索引

GET /_cat/indices?v

查看单个索引结构信息

GET /indexName?pretty=true

创建索引

PUT /shopping

查询索引

GET /shopping

删除索引

DELETE /shopping

创建文档

POST /shopping/_doc
{
	"title":“小米utro”,
	“category”:"小米",
	“images”:"",
	"price":4999
}

//上面的创建是使用es默认的id,也可以自定义,结果中的_id就是1001
PUT /shopping/_doc/1001
{
	"title":“小米utro”,
	“category”:"小米",
	“images”:"",
	"price":4999
}

主键查询文档

GET /shopping/_doc/1001

全部查询

GET /shopping/_search

GET /shopping/_search?pretty=true

GET /shopping/_search?q=category:小米&pretty=true

完全修改

PUT /shopping/_doc/1001
{
	"title":“小米mix”,
	“category”:"小米",
	“images”:"",
	"price":4999
}

局部修改

POST /shopping/_update/1001
{
	"doc":{
	 	"title":“华为手机”,
	}	
}

删除文档

DELETE /shopping/_doc/1001

查询

条件查询

GET /shopping/_search
{
	"query":{
		"match":{
			"category":"小米"
		}
		
	}
}

查询所有

GET /shopping/_search
{
	"query":{
		"match_all":{	
		}
	}
}

分页查询

GET /shopping/_search
{
	"query":{
		"match_all":{	
		}
	},
	"from":0,
	"seze":2,
	"_source":["title"],
	"sort":{
		"price":{
			"order":"asc/desc"
		}
	}
}

多条件查询

{
	"query":{
		"bool":{	
			"must/should/must_not":[
				{
					"match":{
						"category":"小米"
					}
				},{
					“match”:{
						"price":1999
					}
				}
			]
		}
	}
}

过滤查询

{
	"query":{
		"bool":{	
			"should":[
				{
					"match":{
						"category":"小米"
					}
				},{
					“match”:{
						"category":"华为"
					}
				}
			],
			"filter":{
				"range":{
					"price":{
						"gt":5000
					}				
				}
			}
		}
	}
}

完全匹配不分词(小米不会被拆分)

{
	"query":{
		"match_phrase":{
			"category":"小米"
		}
	}
}

高亮显示

{
	"query":{
		"match_phrase":{
			"category":"小米"
		},
		"highlight":{
			"fields":{
				"category":{}
			}
		}
	}
}

聚合操作

{
	"aggs":{	//聚合操作
		"price_group":{//名称,随意起名
			"terms":{//分组
				"field":"price"//分组字段
			}
		}
	}
}

//求平均值
{
	"aggs":{	//聚合操作
		"price_avg":{//名称,随意起名
			"avg":{//分组
				"field":"price"//分组字段
			}
		}
	},
	"size":0//不要原始数据
}

映射关系

//创建索引
PUT /user
//构造映射关系
PUT /user/_mapping
{
	"properties":{
		"name":{
			"type":"text",//text可以被分词
			"index":true //是否可以被索引
		},"sex":{
			"type":"keyworld",
			"index":true
		},"tel":{
			"type":"keyworld",
			"index":false  //不能被查询,作为搜索条件
		},
	}
}

PUT /user/_create/1001
{
	"name":"",
	"sex":"",
	"tel":
}

查看映射关系

GET /user/_mapping

windows集群,修改config/elasticsearch.yml

### 节点1
# 集群名称
cluster.name: my-applicetion
# 节点名称
node.name: node-1001
# 主节点
node.master: true
# 数据节点
node.data: true
# 主机名称
network.host: localhost
#端口号
http.port: 9200
#通信端口
transport.tcp.port:9301
# 跨域
http.cors.enabled:true
http.cors.allow-origin: "*"
### 节点2
# 集群名称
cluster.name: my-applicetion
# 节点名称
node.name: node-1002

# 数据节点
node.data: true
# 主机名称
network.host: localhost
#端口号
http.port: 9201
#通信端口
transport.tcp.port:9302
# 跨域
http.cors.enabled:true
http.cors.allow-origin: "*"

# 查找模块,查找主节点
discovery.seed_hosts:["localhost:9301"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5

补充

#主节点
node.master:true
#数据节点
node.data: true
# 预处理节点
node.ingest:true

主节点可以作为数据节点但应当减少主节点数据处理的工作量,一般将主节点与数据节点分开,也就是三者同时一般只有一个为true (不是必须的,master和data可以同时为true)

创建多分片索引

PUT /users
{
	"settings":{
		"number_of_shards":3,
		"number_of_replicas":1
	}
}

修改副本数量

# 主分片的数目在创建索引的时候就已经定下来了,之后不能再修改,所以我们只能修改副本数量

PUT /users/_settings
{
	"number_of_replicas":2
}

指定分析器查看分词效果

GET /_analyze
{
	"analyzer":"standard", //使用标准分词
	"text":"test an analyze"
}

GET /_analyze
{
	"analyzer":"ik_max_word", //使用标准分词
	"text":"测试单词"
}
  • ik_max_word 会将文本做最细粒度的拆分
  • ik_smart 会将文本做最粗粒度的拆分

es写数据的流程

1. 客户端请求集群节点(任意) 协调节点
2. 协调节点将请求转换到制定的节点
3. 主分片需要将数据保存
4. 主分片将数据发送给副本
5. 副本保存成功后进行反馈
6. 主分片进行反馈
7. 客户端获得反馈

es获取数据流程

1. 客户端发送查询请求到协调节点
2. 协调节点计算数据所在的分片以及全部的副本
3. 为了负载均衡,可以轮询所有的节点
4. 将请求转发给具体的节点
5. 节点返回查询结果,将结果反馈给客户端

es 更新一个文档

1. 客户端发送一个更新请求到协调文档
2. 协调节点将请求转发到主分片
3. 主分片不断尝试写入(可能有其他写入,需要等待,锁的概念)
4. 主分片将数据同步给副本
  • 分片是将数据的水平拆分(可以结合mysql的分表来理解 ),副本 是对数据的备份
  • 写文档:分片选择 hash(id)%分片数
  • 分片控制:用户可以访问任何一个节点获取数据,这个节点称之为协调节点