栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Elasticsearch中索引和文档的管理

Elasticsearch中索引和文档的管理

索引的管理 创建索引
输入:
put manage-test
输出:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "manage-test"
}
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "manage-test"
}
查看所有索引
输入:
get /_cat/indices?v
输出:
health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases                Z2n9fGZrQlixEKRcglQcGA   1   0         41            0     40.2mb         40.2mb
yellow open   manage-test                     CJzuQ_7-Tu6uXh62OFJAVw   1   1          0            0       208b           208b
yellow open   base-test                       utTIsKh9TnCSC2ydy7-v9Q   1   1          3            0     14.1kb         14.1kb
green  open   .apm-custom-link                05QbE7adRASBMQg-bHZRgw   1   0          0            0       208b           208b
green  open   .kibana_task_manager_7.14.1_001 rqa8oIReQ3Cs_VZhp3mEgQ   1   0         14          327    459.3kb        459.3kb
yellow open   test                            Q6ja6kKDQ6-XUBQWcIzXxg   1   1          1            0      3.7kb          3.7kb
green  open   .apm-agent-configuration        0azcibDGQOyQc_truQLksw   1   0          0            0       208b           208b
green  open   kibana_sample_data_logs         Ga-GtFfJSlCZreJEtbr74w   1   0      14074            0      7.4mb          7.4mb
green  open   .kibana_7.14.1_001              cCidQFVpTWaeL97RohksAg   1   0        156           13      4.5mb          4.5mb
green  open   kibana_sample_data_flights      glP6in4qTF2LOqVEDq3UiQ   1   0      13059            0      5.4mb          5.4mb
green  open   .kibana-event-log-7.14.1-000001 JdbM_qppRjy5SFv0_rnOeQ   1   0          4            0     21.9kb         21.9kb
green  open   .tasks                          9h7Gh1_6RBqfUO1ry7cQwg   1   0          6            0       35kb           35kb
判断索引是否存在
输入:
head manage-test
输出:
200 - OK
关闭索引
输入:
post /manage-test/_close
输出:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "indices" : {
    "manage-test" : {
      "closed" : true
    }
  }
}
打开索引
输入:
post /manage-test/_open
输出:
{
  "acknowledged" : true,
  "shards_acknowledged" : true
}
删除索引
输入:
delete manage-test
输出:
{
  "acknowledged" : true
}
配置索引

通过settings参数配置索引,索引的所有配置项都以“index”开头。索引的管理分为静态设置和动态设置两种。

静态设置

只能在索引创建时或在状态为closed index(闭合索引)上设置,主要配置索引主分片、压缩编码、路由等相关信息。

常见的配置参数如下:

配置项说明
index.number_of_shards主分片数,默认为 5。只能在创建索引时设置,不能修改
index.shard.check_on_startup是否应在索引打开前检查分片是否损坏。
false:默认值,当检查到分片损坏将禁止分片被打开;
checksum:检查物理损坏;
true:检查物理和逻辑损坏,这将消耗大量内存和 CPU;
fix:检查物理和逻辑损坏,有损坏的分片将被集群自动删除,这可能导致数据丢失
index.routing_partition_size自定义路由值可以转发的目的分片数。默认为1,只能在索引创建时设置。此值必须小于index.number_of_shards
index.codec默认使用LZ4压缩方式存储数据,也可以设置为best_compression,它使用DEFLATE方式以牺牲字段存储性能为代价来获得更高的压缩比例。

例如:

输入:
put manage-test
{
  "settings": {
    "index.number_of_shards": 3,
    "index.codec": "best_compression"
  }
}
输出:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "manage-test"
}

动态设置

查询索引配置:

输入:
get /manage-test/_settings
输出:
{
  "manage-test" : {
    "settings" : {
      "index" : {
        "codec" : "best_compression",
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "3",
        "provided_name" : "manage-test",
        "creation_date" : "1635051212663",
        "number_of_replicas" : "1",
        "uuid" : "DioM-rPpTESx5oGYXM5Ahw",
        "version" : {
          "created" : "7140199"
        }
      }
    }
  }
}

动态配置索引,比如:

输入:
put /manage-test/_settings
{
  "refresh_interval": "2s"
}
输出:
{
  "acknowledged" : true
}

常用的配置参数如下:

配置项说明
index.number_of_replicas每个主分片的副本数,默认为1
index.auto_expand_replicas基于可用节点的数量自动分配副本数量,默认为false(即禁用此功能)
index.refresh_interval执行刷新操作的频率。默认为1s。可以设置为-1以禁用刷新。
index.max_result_window用于索引搜索的from+size的最大值。默认为10000。
index.blocks.read_only设置为true使索引和索引元数据为只读,false为允许写入和元数据更改。
index.blocks.read设置为true可禁用对索引的读取操作
index.blocks.write设置为true可禁用对索引的写入操作
index.blocks.metadata设置为true可禁用索引元数据的读取和写入
index.max_refresh_listeners索引的每个分片上可用的最大刷新侦听器数
index.max_docvalue_fields_search一次查询最多包含开启 doc_values 字段的个数,默认为100
index.max_script_fields查询中允许的最大script_fields数量。默认为32。
index.max_terms_count可以在terms查询中使用的术语的最大数量。默认为65536。
index.routing.allocation.enable控制索引分片分配。All(所有分片)、primaries(主分片)、new_primaries(新创建分片)、none(不分片)
index.routing.rebalance.enable索引的分片重新平衡机制。all、primaries、replicas、none
index.gc_deletes文档删除后(删除后版本号)还可以存活的周期,默认为60s
index.max_regex_length用于正在表达式查询(regex query)正在表达式长度,默认为1000
配置映射

查看映射:

get /base-test/_mapping

或者只看某个字段的属性:

get /base-test/_mapping/field/lang

修改映射,当然就是通过put或者post方法了。但是要注意,已经存在的映射只能添加字段或者字段的多类型。但是字段创建后就不能删除,大多数参数也不能修改,可以改的是ignore_above。所以设计索引时要做好规划,至少初始时的必要字段要规划好。

文档的管理 增加文档
put /base-test/_doc/1
{
  "crop": "Apache",
  "name": "ES",
  "lang": "JAVA",
  "star": 200
}

如果增加文档时,在Elasticsearch中如果有相同ID的文档存在,则覆盖此文档。

当创建文档的时候,如果不指定ID,系统会自动创建ID。自动生成的ID是一个不会重复的随机数。使用GUID算法,可以保证在分布式环境下,不同节点同一时间创建的id一定是不冲突的。比如:

输入:
post /base-test/_doc
{
  "crop": "Apache",
  "name": "ES",
  "lang": "JAVA",
  "star": 200
}
输出:
{
  "_index" : "base-test",
  "_type" : "_doc",
  "_id" : "lbdMsnwBWUu4sPG3nugf",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 2
}
查询文档
输入:
get /base-test/_doc/1
输出:
{
  "_index" : "base-test",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "crop" : "Apache",
    "name" : "ES",
    "lang" : "JAVA",
    "star" : 200
  }
}
更新文档

前面我们用put方法更新了已经存在的文档,但是可以看见他是整体更新文档,如果我们要更新文档中的某个字段怎么办?需要使用_update接口。

输入:
post /base-test/_update/1
{
  "doc": {
    "year": 2017
  }
}
输出:
{
  "_index" : "base-test",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 3,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 5,
  "_primary_term" : 2
}

如果文档中存在year字段,更新year字段的值,如果不存在year字段,则会新增year字段,并将值设为2017。

_update接口在文档不存在时提示错误,如果希望在文档不存在时创建文档,则可以在请求中添加upsert参数,例如:

输入:
post /base-test/_update/5
{
  "doc": {
    "year": "2020"
  },
  "upsert": {
    "name": "Enjoyedu framework",
    "corp": "enjoyedu "
  }
}
输出:
{
  "_index" : "base-test",
  "_type" : "_doc",
  "_id" : "5",
  "_version" : 3,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 8,
  "_primary_term" : 2
}

或者在请求中添加doc_as_upsert参数,例如:

输入:
post /base-test/_update/6
{
  "doc": {
    "year": "2020"
  },
  "doc_as_upsert": true
}
输出:
{
  "_index" : "base-test",
  "_type" : "_doc",
  "_id" : "6",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 9,
  "_primary_term" : 2
}

upsert参数定义了创建新文档使用的文档内容,但是更新的参数(如上面的year)不会添加到文档中,而doc_as_upsert 参数的含义是直接使用doc参数中的内容作为创建文档时使用的文档内容。

删除文档
输入:
delete /base-test/_doc/lbdMsnwBWUu4sPG3nugf
输出:
{
  "_index" : "base-test",
  "_type" : "_doc",
  "_id" : "lbdMsnwBWUu4sPG3nugf",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 10,
  "_primary_term" : 2
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345500.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号