ElasticSearch(三):ES单机版本基本操作之删除,修改,插入

1. 创建索引

1.1 直接创建索引

可以直接使用head插件创建索引,指定分片数和备份数即可。如下图:

1.2 创建结构化索引

上图创建的索引,点开索引信息,mapping是空的,表示该索引的字段并没有指定,我们可以在创建索引的时候直接指定其字段名来创建。

使用POSTMAN进行创建(任何工具都行,习惯)

请求路径:localhost:9200/book    --》ES服务的ip:端口/要创建的索引名,请求方法:PUT

请求体:

{
    "settings":{
        "number_of_shards":5,   //分片数
        "number_of_replicas":1  //备份数
    },
  //映射文件
"mappings":{
     //类型名
"novel":{
       //文档的所有字段以及类型
"properties":{ "name":{ "type":"text" }, "author":{ "type":"keyword" }, "word_count":{ "type":"integer" }, "publish_date":{ "type":"date", "format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd"   //日期格式化允许的类型 } } } } }

插入结果如下:表示索引创建成功

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "book"
}

关于结构化索引和非结构化索引的区别:

  结构化索引,类似MySQL,我们会对索引结构做预定义,包括字段名,字段类型等;那么,非结构化索引,就类似Mongo,索引结构未知,根据具体的数据来update索引的mapping。那么如何选择两种索引呢,还是跟具体的使用场景有关,结构化相比非结构化,更易优化,性能好些,非结构化相较灵活,只是频繁update索引mapping会有一定的性能损耗。

重点:需要特别特别注意的是:如果你的索引后期要修改,那么你只能重建一个你要修改成的索引,然后将数据复制到新的索引中,代码如下(亲测可用)

http://localhost:9200/_reindex

{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index"
  }
}

2. 插入数据

2.1 指定id插入

需要注意的是:指定id插入,使用的方法时PUT,路径是:服务ip:端口/索引名/类型名/id,过程及结果如下

2.2 不指定id插入

需要特别注意的是:当不使用id插入的时候,请求方法必须是:POST,并且路径不能指定id,插入成功后会返回id。过程以及结果如下

关于插入数据需要注意的是:

  当你创建的索引是非结构化的索引的时候,你可以随意插入你想要的字段作为属性。并且你每次插入的字段值可以是不一致的,索引会自动更新mapping,来适应数据。但是每次插入会耗费性能来做这些事情。

  当你创建的索引是结构化的索引的时候,你如果插入的数据不符合你创建的mapping,那么也会自动更新mapping来适应你添加的数据,不会出现添加不上数据的情况。但是不建议这么做。

3. 修改数据

3.1 直接修改doc数据

需要注意的是: 方法时POST,路径为:ES服务ip:端口/要修改的数据的id/_update,并且,需要再修改的json中,使用doc进行修改,如下图:

3.2 使用内置脚本修改(可以对数据进行计算)

 

需要注意的是:方法时POST,路径跟上面一致,但是请求体的时候,使用的是script,并且里面的字段是固定的(应该是),inline字段的值时可以进行计算的。

3.3 使用内置脚本并制定参数进行修改

需要注意的是:inline中的参数必须和params中的参数对应才可!

 4 删除数据

直接使用delete请求,指定索引,类型,id即可删除。

 

 查询,是ElasticSearch的重中之重,所以会单独更新一篇进行详细解释。

 

posted on 2018-08-21 11:47  一个什么都不会的人  阅读(4975)  评论(0编辑  收藏  举报