大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧
大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧每次更新完数据后,_seq_no 就会 1,所以可以用作并发控制。请求:http://192.168.56.10:9200/member/external/2 Reposne: { "_index": "member" //在哪个索引 "_type": "external" //在那个类型 "_id": "2" //记录 id "_version": 7 //版本号 "_seq_no": 9 //并发控制字段,每次更新就会 1,用来做乐观锁 "_primary_term": 1 //同上,主分片重新分配,如重启,就会变化
回到顶部
四、初阶检索玩法4.1._cat 用法GET /_cat/nodes: 查看所有节点
GET /_cat/health: 查看 es 健康状况
GET /_cat/master: 查看主节点
GET /_cat/indices: 查看所有索引
查询汇总:
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
4.2. 索引一个文档 ( 保存 )
例子:在 customer 索引下的 external 类型下保存标识为 1 的数据。
- 使用 Kibana 的 Dev Tools 来创建
PUT member/external/1
{
"name":"jay huang"
}
Reponse:
{
"_index": "member" //在哪个索引
"_type": "external" //在那个类型
"_id": "2" //记录 id
"_version": 7 //版本号
"result": "updated" //操作类型
"_shards": {
"total": 2
"successful": 1
"failed": 0
}
"_seq_no": 9
"_primary_term": 1
}
- 也可以通过 Postman 工具发送请求来创建记录。
注意:
PUT 和 POST 都可以创建记录。
POST:如果不指定 id,自动生成 id。如果指定 id,则修改这条记录,并新增版本号。
PUT:必须指定 id,如果没有这条记录,则新增,如果有,则更新。
4.3 查询文档请求:http://192.168.56.10:9200/member/external/2
Reposne:
{
"_index": "member" //在哪个索引
"_type": "external" //在那个类型
"_id": "2" //记录 id
"_version": 7 //版本号
"_seq_no": 9 //并发控制字段,每次更新就会 1,用来做乐观锁
"_primary_term": 1 //同上,主分片重新分配,如重启,就会变化
"found": true
"_source": { //真正的内容
"name": "jay huang"
}
}
_seq_no 用作乐观锁
每次更新完数据后,_seq_no 就会 1,所以可以用作并发控制。
当更新记录时,如果_seq_no 与预设的值不一致,则表示记录已经被至少更新了一次,不允许本次更新。
用法如下:
请求更新记录 2: http://192.168.56.10:9200/member/external/2?if_seq_no=9&&if_primary_term=1
返回结果:
{
"_index": "member"
"_type": "external"
"_id": "2"
"_version": 9
"result": "updated"
"_shards": {
"total": 2
"successful": 1
"failed": 0
}
"_seq_no": 11
"_primary_term": 1
}
_seq_no 等于 10,且_primary_term=1 时更新数据,执行一次请求后,再执行上面的请求则会报错:版本冲突
{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception"
"reason": "[2]: version conflict required seqNo [10] primary term [1]. current document has seqNo [11] and primary term [1]"
"index_uuid": "CX6uwPBKRByWpuym9rMuxQ"
"shard": "0"
"index": "member"
}
]
"type": "version_conflict_engine_exception"
"reason": "[2]: version conflict required seqNo [10] primary term [1]. current document has seqNo [11] and primary term [1]"
"index_uuid": "CX6uwPBKRByWpuym9rMuxQ"
"shard": "0"
"index": "member"
}
"status": 409
}
4.4 更新文档
- 用法
POST 带 _update 的更新操作,如果原数据没有变化,则 repsonse 中的 result 返回 noop ( 没有任何操作 ) ,version 也不会变化。
请求体中需要用 doc 将请求数据包装起来。
POST 请求:http://192.168.56.10:9200/member/external/2/_update
{
"doc":{
"name":"jay huang"
}
}
响应:
{
"_index": "member"
"_type": "external"
"_id": "2"
"_version": 12
"result": "noop"
"_shards": {
"total": 0
"successful": 0
"failed": 0
}
"_seq_no": 14
"_primary_term": 1
}
使用场景:对于大并发更新,建议不带 _update。对于大并发查询,少量更新的场景,可以带_update,进行对比更新。
- 更新时增加属性
请求体重增加 age 属性
http://192.168.56.10:9200/member/external/2/_update
request:
{
"doc":{
"name":"jay huang"
"age": 18
}
}
response:
{
"_index": "member"
"_type": "external"
"_id": "2"
"_version": 13
"result": "updated"
"_shards": {
"total": 2
"successful": 1
"failed": 0
}
"_seq_no": 15
"_primary_term": 1
}
4.5 删除文档和索引
- 删除文档
DELETE 请求:http://192.168.56.10:9200/member/external/2
response:
{
"_index": "member"
"_type": "external"
"_id": "2"
"_version": 2
"result": "deleted"
"_shards": {
"total": 2
"successful": 1
"failed": 0
}
"_seq_no": 1
"_primary_term": 1
}
- 删除索引
DELETE 请求:http://192.168.56.10:9200/member
repsonse:
{
"acknowledged": true
}
- 没有删除类型的功能
使用 kinaba 的 dev tools 工具,输入以下语句
POST /member/external/_bulk
{"index":{"_id":"1"}}
{"name":"Jay Huang"}
{"index":{"_id":"2"}}
{"name":"Jackson Huang"}
执行结果如下图所示:
- 拷贝官方样本数据
https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json
- 在 kibana 中执行脚本
POST /bank/account/_bulk
{"index":{"_id":"1"}}
{"account_number":1 "balance":39225 "firstname":"Amber" "lastname":"Duke" "age":32 "gender":"M" "address":"880 Holmes Lane" "employer":"Pyrami" "email":"amberduke@pyrami.com" "city":"Brogan" "state":"IL"}
{"index":{"_id":"6"}}
......
- 查看所有索引