Elasticsearch 2: 管理索引和文档

本文详细介绍了Elasticsearch中的索引管理,包括创建、关闭、打开索引,配置静态和动态设置,以及文档的增删改查。还涵盖了如何查看映射配置和进行数据检索。深入理解索引和文档管理是Elasticsearch高效运用的关键。
摘要由CSDN通过智能技术生成

Elasticsearch 1: 基本原理和概念
Elasticsearch 2: 管理索引和文档
Elasticsearch 3: 数据检索和分析
Elasticsearch 4: 相关性检索和组合查询
Elasticsearch 5: 聚集查询
Elasticsearch 6: 索引别名
Elasticsearch 集群
SpringBoot 整合 Elasticsearch

1. 索引的管理

  • 对索引的操作遵循Restful风格,GET 用来查看索引,PUT 用来创建索引,DELETE用来删除索引,HEAD用来检验索引是否存在

1.1 列出所有索引

GET /_cat/indices?v

1.2 关闭索引

  • 如果关闭了一个索引,就无法通过Elasticsearch 来读取和写人其中的数据,直到再次打开它。在实际情况中,最好永久地保存应用日志,以防要查看很久之前的信息。另一方面,在 Elasticsearch 中存放大量数据需要增加资源。对于这种案例,关闭旧的索引非常有意义。你可能并不需要那些数据,但是也不想删除它们。一旦索引被关闭,它在 Elasticsearch 内存中唯一的痕迹是其元数据,如名字以及分片的位置。如果有足够的磁盘空间,而且也不确定是否需要在那个数据中再次搜索,关闭索引要比删除索引更好。
POST /open-soft/_close

1.3 打开索引

POST /open-soft/_open

1.4 配置索引

  • 通过 settings 参数配置索引,索引的所有配置项都以“index”开头。索引的管理分为静态设置和动态设置两种。
1.4.1 静态设置
  • 只能在索引创建时或在状态为 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 test1
{
    "settings": {
        "index.number_of_shards": 3,
        "index.codec": "best_compression"
    }
}
1.4.2 动态设置
  • 通过接口“_settings”进行,同时查询配置也通过这个接口进行,比如:
#所有
get _settings
#索引fisher1
get /fisher1/_settings
#索引fisher1和fisher2
get /fisher1,fisher2/_settings
  • 配置索引则通过
put fisher1/_settings
{
	"refresh_interval":"2s"
}
  • 常用的配置参数如下
  • 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
1.4.3 查看映射配置
  • 通过_mapping 接口进行
get /open-soft/_mapping?pretty
  • 或者只看某个字段的属性
get /open-soft/_mapping/field/lang
  • 修改映射,当然就是通过 put 或者 post 方法了。但是要注意,已经存在的映射只能添加字段或者字段的多类型。但是字段创建后就不能删除,大多数参数也不能修改,可以改的是 ignore_above。所以设计索引时要做好规划,至少初始时的必要字段要规划好。

2. 文档的管理

2.1 增加文档

put /fisher/_doc/1
{
    "name": "Apache Hadoop",
    "lang": "Java",
    "corp": "Apache",
    "stars": 200
}
  • 如果增加文档时,在 Elasticsearch 中如果有相同 ID 的文档存在,则更新此文档;没有这个ID,则新增

2.2 文档的 id

  • 当创建文档的时候,如果不指定 ID,系统会自动创建 ID。自动生成的 ID 是一个不会重复的随机数。使用 GUID 算法,可以保证在分布式环境下,不同节点同一时间创建的_id 一定是不冲突的。比如
post /fisher/_doc
{
    "name": "Apache Hadoop",
    "lang": "Java",
    "corp": "Apache",
    "stars": 200
}

在这里插入图片描述

2.3 查询文档

get /fisher/_doc/1

在这里插入图片描述

2.4 更新文档

  • 前面我们用 put 方法更新了已经存在的文档,但是可以看见他是整体更新文档,如果我们要更新文档中的某个字段怎么办?需要使用_update 接口。
post /fisher/_update/1
{
    "doc": {
        "year": 2022
    }
}
  • 如果文档中存在 year 字段,更新 year 字段的值,如果不存在 year 字段,则会新增 year 字段,并将值设为 2022。

在这里插入图片描述

  • update 接口在文档不存在时提示错误,如果希望在文档不存在时创建文档,则可以在请求中添加 upsert 参数或 doc_as_upsert 参数,例如
post /fisher/_update/5
{
    "doc": {
        "year": 2022
    },
    "upsert": {
        "name": "ES Framework",
        "corp": "ES "
    }
}

在这里插入图片描述
在这里插入图片描述

  • 或者
post /fisher/_update/6
{
    "doc": {
        "year": 2022
    },
    "doc_as_upsert" : true
}

在这里插入图片描述
在这里插入图片描述

2.5 删除文档

delete /fisher/_doc/1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值