ES查询底层原理
作者:互联网
一、正排索引
1、倒排索引的优势在于查找包含某个项的文档,如果用它确定哪些项是否存在文档中那么就使用正排索引
2、区别正排索引和倒排索引
3、doc_value与fielddata
二、基于mget批量查询以及基于bulk的批量增删改
1、mget:批量查询
GET /<index>/_mget
GET /product/_mget { "docs":[ { "_id":2, "_source":{ "include":["name"], "exclude":["price"] } } ] }
2、bulk:批量增删改 no-query
POST /<index>/_bulk
{"action": {"metadata"}}
{"data"}
Operate:
① create:PUT /index/_create/id/,强制创建(是否制定id)
如果不存在则报错,如果存在则报错
指定id:
PUT /product2/_create/1/ { "name":"xiaomi", "desc":"shouji", "price":3999 }
自动生成id:
POST /product2/_doc
{
"name":"xiaomi",
"desc":"shouji",
"price":3999
}
创建
POST /_bulk
{"create":{"_index":"product2","_id":"1"}}
{"name":"_buld create1"}
{"create":{"_index":"product2","_id":"11"}}
{"name":"_buld create1"}
② delete:删除(lazy delete原理)
POST /_bulk {"delete":{"_index":"product2","_id":"11"}}
③ index:可以是创建,也可以是全量替换
POST /_bulk {"index":{"_index":"product2","_id":"1"}} {"doc":{"name":"bulk name1"}} {"index":{"_index":"product2","_id":"11"}} {"doc":{"name":"bulk name2"}}
④ update:执行partial update(全量替换,部分替换)
POST /_bulk {"update":{"_index":"product2","_id":"1","retry_on_conflict":"3"}} {"doc":{"name":"bulk name"}}
三、ES并发冲突问题(悲观锁和乐观锁)
(1) 悲观锁:各种情况,都加锁,读写锁、行级锁、表级锁。使用简单,但是并发能力很低
(2) 乐观锁:并发能力高,操作麻烦,每次no-query操作都需要比对version
标签:index,name,查询,bulk,product2,POST,id,ES,底层 来源: https://www.cnblogs.com/lyc-code/p/13673544.html