【ES】2.Elastic操作

2021-05-31  本文已影响0人  河神

索引操作

创建索引 文档

PUT heshen_test_v1
{
  
  "settings": {
    "index":{
      "number_of_replicas": 2, //副本数2
      "number_of_shards": 3,//分片3
      "max_result_window": 1000000, //最大返回数据 1000000
      "write" : {
          "wait_for_active_shards" : "2" //等待多少分片执行完成
        }
    }
  },
  "mappings": { //映射字段
    "_doc":{ // 约定都使用_doc ,可以不实用_doc,但是不能使用_开头,
        "properties":{
           "itemName":{
              "type" : "text"
           },
           "weight":{
              "type" : "scaled_float",
              "scaling_factor": 100
           },
           "price":{
              "type" : "long"
           }
        }
    }
  },
  "aliases": {//别名,用处很多
    "heshen_test": {}
  },
  
}

获取索引

删除索引

是否存在

打开/关闭索引

索引统计

索引别名

文档

创建修改别名

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "heshen_test_v1",
        "alias": "heshen",
        "is_write_index": true,
        "routing": "1",
        "filter": {
          "term": {
            "remarks": "测试"
          }
        }
      }
    },
    {
      "add": {
        "index": "heshen_test_v2",
        "alias": "heshen"
      }
    }
  ]
}

删除别名

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "heshen_test_v2",
        "alias": "heshen"
      }
    },
    {
      "remove": {
        "index": "heshen_test_v1",
        "alias": "heshen"
      }
    }
  ]
}

Reindex

文档

普通复制

POST _reindex
{
  "source": {
    "index": "heshen_test_v1"
  },
  "dest": {
    "index": "heshen_test_v2"
  }
}

其他参数

POST _reindex
{
  "size": 12,//只处理12条数据
  "conflicts": "proceed",//冲突计数
  "source": {
    "index": "heshen_test_v1", //也可以是  "index":[ "heshen_test_v1"," "heshen_test_v3"]
    "query": { //设置源数据那些数据需要复制
      "term": {
        "weight": {
          "value": 12
        }
      }
    },
   "_source": ["weight", "itemName"],//只复制部分字段
   "sort": { "date": "desc" },//设置处理数据排序
   "script": {
      "inline": "if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}",
      "lang": "painless"
   }
  },
  "dest": {
    "index": "heshen_test_v2",
    "version_type": "external", //版本复制
    "op_type":"create" //只会创建不存在的数据
  }
}

索引模板

索引模板是什么

创建索引模板

PUT _template/template_heshen
{
  "index_patterns": [//匹配模式
    "heshen*"
  ],
  "order" : 0,//优先级
  "settings": {//预定的设置
    "index": {
      "number_of_replicas": 2,
      "number_of_shards": 3,
      "max_result_window": 1000000
    }
  },
  "mappings": {//预定的mappings
    "_doc": {
        "properties": {
          "created_name": {
            "type": "keyword"
          }
        }
      
    },
    "version": 123
  }
}

删除索引模板

获取索引模板

模板是否存在

模板匹配

Mapping操作

更新Mapping

PUT heshen_test_v1/_mapping/_doc
{
  "properties":{
     "img":{
       "type":"keyword"
     }
  }
}
PUT /twitter-1,twitter-2/_mapping/_doc 
{
  "properties": {
    "user_name": {
      "type": "text"
    }
  }
}

获取Mapping

Settings操作

更新Settings 文档

PUT /heshen_test_v1/_settings
{
    "index" : {
        "number_of_replicas" : 1
    }
}

获取Settings

文档 Document

插入

指定id插入,如果存在则是更新

PUT heshen_test_v1/_doc/2
{
  "itemName": "C货2",
  "weight": 12,
  "price":20
}

es自动生成id (使用post代替put)

POST heshen_test_v1/_doc/2
{...}

指定操作类型,指定类型为创建,如果id已经存在,就会返回失败

PUT heshen_test_v1/_doc/4/_create
{...}

PUT heshen_test_v1/_doc/4?op_type=create
{...}

超时时间

PUT heshen_test_v1/_doc/4?timeout=10ms
{...}

版本号-乐观锁更新

PUT heshen_test_v1/_doc/2?version=17
{...}
当文档version=17的时候保存成功

PUT heshen_test_v1/_doc/2?version=17&version_type=external_gte
{...}
当文档version<=17的时候成功

PUT heshen_test_v1/_doc/2?version=17&version_type=external
{...}
当文档version<17的时候成功

version_type类型

internal :完全相同才成功

external_gt || external :当请求的版本号大于的时候才成功

external_gte :当请求的版本号大于等于的时候才成功

自动创建索引。

如果索引不存在,自动创建索引,并且应用索引模板,字段类型es会动态生成。可以通过action.auto_create_index 来控制。

PUT _cluster/settings
{
    "persistent": {
        "action.auto_create_index": "heshen*"//只允许某些索引创建 
    }
}

PUT _cluster/settings
{
    "persistent": {
        "action.auto_create_index": "false" //全部不允许
    }
}

PUT _cluster/settings
{
    "persistent": {
        "action.auto_create_index": "true" //全部允许
    }
}

更新

基于id部分字段更新

POST heshen_test_v1/_doc/1/_update
{
   "doc": {
     "itemName":"C货112"
   }
}

基于脚本更新

POST heshen_test_v1/_doc/1/_update
{
  "script": {
     "source":"ctx._source.remarks='和天下'"
  }
}

POST heshen_test_v1/_doc/1/_update
{
  "script": {
    "source": "ctx._source.weight=params.count",
    "lang": "painless",
    "params": {
      "count": 4
    }
  }
}

Upsert

POST heshen_test_v1/_doc/6/_update
{
  "script": {
    "source": "ctx._source.weight=params.count",
    "lang": "painless",
    "params": {
      "count": 4
    }
  },
  "upsert": {
    "itemName": "C货2",
    "weight": 12,
    "price": 20
  }
}

更新基于条件

POST heshen_test_v1/_update_by_query
{
    "script": {
    "source": "ctx._source.remarks=ctx._source.remarks+'*'",
    "lang": "painless"
  },
  "query": {
    "terms": {
      "_id": [
        "1"
      ]
    }
  }
}

如何使用脚本

链接

脚本构成

  "script": {
    "lang":   "...",  //脚本使用的语言 默认为 painless 
    "source" | "id": "...", // 
    "params": { ... } //参数
  }

搜索返回字段

GET heshen_test_v1/_search
{
  "script_fields": {
    "weight_big": {
      "script": {
        "lang":   "expression",
        "source":"doc['weight'] * sp",
        "params": {
           "sp": 100
        }
      }
    }
  }
}

操作数据



noop: 设置 ctx.op = “noop” 。如果你的脚本并没有对原来的doc做任何更改。这将导致 reindex 忽略该doc。这将在响应的 noop 中被展示。

delete: 设置ctx.op = “delete”,如果你的脚本如此设定,target index中的该doc会被被删除。这将在响应的 deleted 中被展示。


删除

基于id进行删除

DELETE heshen_test_v1/_doc/1

基于条件删除

POST heshen_test_v1/_delete_by_query
{
  "query": {
    "terms": {
      "_id": [
        "1"
      ]
    }
  }
}

Bulk 批量增删改

语法

除delete操作意外,所有的操作必须是一对JSON ,而且每个JSON不能换行相邻JSON必须换行

POST _bulk

{ action: { metadata }}

{ request body }

{ action: { metadata }}

{ request body }

操作类型

示例

POST _bulk
{"index":{"_index":"heshen_test_v1","_type":"_doc","_id":"4"}}
{"_doc":{"itemName":"C货3","weight":12,"price":20}}

POST heshen_test_v1/_doc/_bulk 
{"delete": {"_id": 5}}

ps:在es的bulk操作中,可以把索引,type加在操作前面,这样在json中可以不写出 index ,type

上一篇下一篇

猜你喜欢

热点阅读