✅P105-108_全文检索-ElasticSearch-入门
2024/2/13大约 3 分钟
1、_cat
GET /_cat/nodes
GET /_cat/nodes: 查看所有节点

GET /_cat/health
GET /_cat/health: 查看 es 健康状况

GET /_cat/master
GET /_cat/master: 查看主节点

GET /_cat/indices
GET /_cat/indices: 查看所有索引,类似MySQL的show databases

2、索引一个文档(保存)
PUT&POST
接口地址:http://192.168.56.10:9200/customer/external/1
保存一个数据, 保存在哪个索引的哪个类型下, 指定用哪个唯一标识
PUT customer/external/1; 在 customer 索引下的 external类型下保存 1 号数据为
PUT http://192.168.17.130:9200/customer/external/2
{
    "name": "Jack"
}
PUT 和 POST方式请求都可以
POST 新增,如果不指定 id, 会自动生成 id。 指定 id 就会修改这个数据, 并新增版本号
POST:http://192.168.56.10:9200/customer/external/执行过程发生如下错误:
index [xxx] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];原因:当es检测到磁盘使用超过95%的时候,es索引保持只读状态
解决:
- 扩容磁盘,或删除掉多余文件即可。让es检测到磁盘占用到95%以下即可。
- https://blog.csdn.net/fxtxz2/article/details/104774473/
PUT 可以新增可以修改。 PUT 必须指定 id; 由于 PUT 需要指定 id, 我们一般都用来做修改操作, 不指定 id 会报错。

3、查询文档
URL
GET http://192.168.56.10:9200/customer/external/1结果:
{
  "_index": "customer", //在哪个索引
  "_type": "external", //在哪个类型
  "_id": "1", //记录 id
  "_version": 2, //版本号
  "_seq_no": 1, //并发控制字段, 每次更新就会+1, 用来做乐观锁
  "_primary_term": 1, //同上, 主分片重新分配, 如重启, 就会变化
  "found": true,
  "_source": { //真正的内容
    "name": "John Doe"
  }
}
模拟并发操作
一条请求想将name修改为XXX,一条请求想将name修改为RRR,判断依据就是:?if_seq_no=0&if_primary_term=1
不知道?if_seq_no=0&if_primary_term=1可以先查询一下索引,


假设第一条请求先到达ES,

第二条请求达到ES,更新失败

而修改**_seq_no**成功,

4、更新文档
POST customer/external/1/_update
{
	"doc": {
		"name": "John Doew"
	}
}或者
POST customer/external/1
{
	"name": "John Doe2"
}或者
PUT customer/external/1
{
	"name": "John Doe"
}不同之处:
- POST 操作会对比源文档数据, 如果相同不会有什么操作, 文档 version 不增加;
- PUT 操作总会将数据重新保存并增加 version 版本;
带_update 对比元数据如果一样就不进行任何操作,看场景;
- 对于大并发更新, 不带 update;
- 对于大并发查询偶尔更新, 带 update; 对比更新, 重新计算分配规则。
更新同时增加属性
POST customer/external/1/_update
{
	"doc": { "name": "Jane Doe", "age": 20 }
}PUT 和 POST 不带_update 也可以。
5、删除文档&索引
DELETE customer/external/1
DELETE customer