(37)ElasticSearch基于groovy脚本执行partial update

Posted javasl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(37)ElasticSearch基于groovy脚本执行partial update相关的知识,希望对你有一定的参考价值。

  1、准备数据

PUT /lib/user/1
{
    "first_name":"Jane",
    "last_name":"Smith",
    "age":32,
    "about":"I like to collect rock albums",
    "interests":[ "music" ]
}

  2、操作演示

  (1)age增加1

GET /lib/user/1/_update
{
  "script":"ctx._source.age+=1"
}

  查看结果:GET /lib/user/1

{
  "_index": "lib",
  "_type": "user",
  "_id": "1",
  "_version": 2,
  "found": true,
  "_source": {
    "first_name": "Jane",
    "last_name": "Smith",
    "age": 33,
    "about": "I like to collect rock albums",
    "interests": [
      "music"
    ]
  }
}

  (2)改变last_name的值

GET /lib/user/1/_update
{
  "script":"ctx._source.last_name+=‘hehe‘"
}

  查看结果:GET /lib/user/1

{
  "_index": "lib",
  "_type": "user",
  "_id": "1",
  "_version": 3,
  "found": true,
  "_source": {
    "first_name": "Jane",
    "last_name": "Smithhehe",
    "age": 33,
    "about": "I like to collect rock albums",
    "interests": [
      "music"
    ]
  }
}

  3)增加一个interests

GET /lib/user/1/_update
{
  "script":{
  "source":"ctx._source.interests.add(params.tag)",
  "params":{
    "tag":"football"
  }
}
}

  查看结果:GET /lib/user/1

{
  "_index": "lib",
  "_type": "user",
  "_id": "1",
  "_version": 4,
  "found": true,
  "_source": {
    "first_name": "Jane",
    "last_name": "Smithhehe",
    "age": 33,
    "about": "I like to collect rock albums",
    "interests": [
      "music",
      "football"
    ]
  }
}

  4)删除一个interests

GET /lib/user/1/_update
{
  "script":{
    "source":"ctx._source.interests.remove(ctx._source.interests.indexOf(params.tag))",
    "params":{
       "tag":"football"
     }
  }
}

  查看结果:GET /lib/user/1

{
  "_index": "lib",
  "_type": "user",
  "_id": "1",
  "_version": 5,
  "found": true,
  "_source": {
    "first_name": "Jane",
    "last_name": "Smithhehe",
    "age": 33,
    "about": "I like to collect rock albums",
    "interests": [
      "music"
    ]
  }
}

  5)删除该文档,删除年龄为33的文档

GET /lib/user/1/_update
{
  "script":{
    "source":"ctx.op=ctx._source.age==params.count?‘delete‘:‘none‘",
    "params":{
      "count":33
    }
  }
}

  查看结果:GET /lib/user/1

{
  "_index": "lib",
  "_type": "user",
  "_id": "1",
  "found": false
}

  6)有该文档的话给age增加1,没有添加一个文档

GET /lib/user/1/_update
{
  "script":"ctx._source.age+=1",
  "upsert":{
     "first_name": "Jane",
    "last_name": "Smith",
    "age": 18,
    "about": "I like to collect rock albums",
    "interests": [
      "music"
    ]
  }
}

  查看结果:GET /lib/user/1

{
  "_index": "lib",
  "_type": "user",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "first_name": "Jane",
    "last_name": "Smith",
    "age": 18,
    "about": "I like to collect rock albums",
    "interests": [
      "music"
    ]
  }
}

 

以上是关于(37)ElasticSearch基于groovy脚本执行partial update的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch的Groovy Script自定义评分检索

ElasticSearch:在禁用 Groovy 的 _score 字段上进行聚合

如何使用Elasticsearch groovy script脚本更新数据

Elasticsearch 无法使用 lang groovy 运行内联脚本 [doc ....]

Elasticsearch自定义过滤插件实现复杂逻辑过滤

Elasticsearch技术解析与实战Elasticsearch partial update