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

原文地址:https://www.cnblogs.com/lyc-code/p/13673544.html