• Scripting查询


    一、Painless

    1、Painless是一种专门用于Elasticsearch的简单,用于内联和存储脚本,类似于Java,也有注释、关键字、类型、变量、函数等,安全的脚本语言。它是Elasticsearch的默认脚本语言,可以安全地用于内联和存储脚本。

    2、语法

    POST /product2/_update/4
    {
      "script": {
        "source": "ctx._source.price-=1"
      }
    }

      举个例子 比如小米10出新款了 新增一个tag叫 无线充电
      POST product2/_update/3
      {
        "script": {
        "lang": "painless",
        "source": "ctx._source.tags.add('无线充电')"
        }
      }

    ①支持操作:delete、upsert、noop

    POST product2/_update/15
    {
      "script": {
        "lang": "painless",
        "source": "ctx.op='delete'"
      }
    }
    #upsert   smartison  update insert
    #如果数据存在,执行partial update操作,如果数据不存在,那么执行create操作
    GET /product2/_doc/15
    POST product2/_update/15
    {
      "script": {
        "source": "ctx._source.price += params.param1",
        "lang": "painless",
        "params": {
          "param1": 100
        }
      },
      "upsert": {
        "name": "小米10",
        "price": 1999
      }
    }

    ②Stored scripts:可以理解为script模板  缓存在集群的cache中

    格式:/_scripts/{id} 

    POST _scripts/is
    {
      "script":{
        "lang": "painless",
        "source": "doc['price'].value*params.discount"
      }
    }
    GET _scripts/is
    
    GET /product/_search
    {
      "script_fields": {
        "test_field": {
          "script": {
            "id": "is",
            "params": {
              "discount": 0.5
            }
          }
        }
      }
    }

    二、ES写入原理

    第一步:写入请求会进入内存,写入Buffer文件中

    第二步:Buffer文件每1s就会创建一个index segment,瞬间将数据同步到OS Cache中

    第三步:OS Cache会将index segment的状态修改为open,这时客户端就可以进行数据查询

    第四步:当OS Cache存储一定数值或一定时间时,会将Buffer中的请求执行commit操作,写入OS Cache

        OS Cache会执行fsync将内存中的数据写入磁盘OS Disk

      为实现容灾:每次写入Buffer时都会同时将数据写入translog文件中,当触发fsync操作时会清空translog文件

  • 相关阅读:
    ES6 Promise 对象及解决回调地狱问题
    ES6 Iterator迭代器和for...of循环
    ES6 Reflect反射
    ES6 Proxy代理
    ES6 Map对象与Set对象
    端口隔离的应用场景与配置
    交换机级联,堆叠,集群技术介绍
    OSPF虚连接简单配置
    小结ospf基本配置的三个参数
    静态路由配置的3个参数
  • 原文地址:https://www.cnblogs.com/lyc-code/p/13680620.html
Copyright © 2020-2023  润新知