首页 > 其他 > 详细

ES查询底层原理

时间:2020-09-16 16:01:59      阅读:71      评论:0      收藏:0      [点我收藏+]

一、正排索引

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

 

ES查询底层原理

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!