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

  • 相关阅读:
    LR11
    安装Nginx+uWSGI+Django环境
    MYSQL 安装更新,使用,管理,备份和安全等
    oracle里要查看一条sql的执行情况,有没有走到索引,怎么看?索引不能提高效率?
    大神:python怎么爬取js的页面
    Sublime 编译出来的是 dos格式,不是unix格式
    前天搞了一天?昨天搞了一天?今天搞了半小时
    搞了一宿,弄完了一个POP3协议
    我竟然。。。傻了近一年
    跨进程信息交互真个费事。
  • 原文地址:https://www.cnblogs.com/lyc-code/p/13680620.html
Copyright © 2011-2022 走看看