zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    洛谷 P1550 [USACO08OCT]Watering Hole G(最小生成树||超级源点)
    洛谷 P2168 [NOI2015]荷马史诗(Huffman树|编码)
    洛谷 P5658 括号树(DFS)
    用堆来求中位数
    c++各种输入输出(文件输入输出,标准输入输出,一些字符串)
    Hello,world!
    【NOIP2013】花匠
    【洛谷习题】最长上升子序列
    【NOIP2014】联合权值
    【NOIP2014】飞扬的小鸟
  • 原文地址:https://www.cnblogs.com/lyc-code/p/13673544.html
Copyright © 2011-2022 走看看