✅P105-108_全文检索-ElasticSearch-入门

gong_yz大约 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/1open in new window

保存一个数据, 保存在哪个索引的哪个类型下, 指定用哪个唯一标识

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索引保持只读状态

解决:

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