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

Elasticsearch 管理索引和文档

Elasticsearch 管理索引和文档

目录

1. 索引的管理

1.1 列出所有索引1.2 关闭索引1.3 打开索引1.4 配置索引

1.4.1 静态设置1.4.2 动态设置1.4.3 配置映射 2. 文档的管理

2.1 增加文档2.2 文档的 id2.3 查询文档2.4 更新文档2.5 删除文档

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_shardsindex.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 每个主分片的副本数。默认为 1index.auto_expand_replicas 基于可用节点的数量自动分配副本数量,默认为 false(即禁用此功能)index.refresh_interval 执行刷新操作的频率。默认为 1s。可以设置为 -1 以禁用刷新。index.max_result_window 用于索引搜索的 from+size 的最大值。默认为 10000index.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 字段的个数,默认为 100index.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、noneindex.gc_deletes 文档删除后(删除后版本号)还可以存活的周期,默认为 60sindex.max_regex_length 用于正在表达式查询(regex query)正在表达式长度,默认为 1000 1.4.3 配置映射

通过_mapping 接口进行

get /open-soft/_mapping

或者只看某个字段的属性

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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