快捷搜索:  汽车  科技

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧每次更新完数据后,_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 工具发送请求来创建记录。

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(1)

注意:

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 }

  • 没有删除类型的功能
4.6 批量导入数据

使用 kinaba 的 dev tools 工具,输入以下语句

POST /member/external/_bulk {"index":{"_id":"1"}} {"name":"Jay Huang"} {"index":{"_id":"2"}} {"name":"Jackson Huang"}

执行结果如下图所示:

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(2)

  • 拷贝官方样本数据

https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(3)

  • 在 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"}} ......

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(4)

  • 查看所有索引

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(5)

猜您喜欢: