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
}
Elasticsearch中索引和文档的管理相关推荐
- elasticsearch5.0.0中索引和文档接口的变化
2019独角兽企业重金招聘Python工程师标准>>> 索引接口变化 当运行索引映射的时候禁止关闭或删除索引操作. 在5.0之前的版本,当索引正在进行映射操作的时候,关闭索引或者删除 ...
- 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...
第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...
- 【Elasticsearch】估算在 Elasticsearch 中存储文档的成本
1.概述 翻译:估算在 Elasticsearch 中存储文档的成本 AppDynamics 一直在增加使用 ElasticSearch 来实现对大量数据点的实时分析.其中,我们记录了最终用户对我们产 ...
- Elasticsearch基础(三)索引和文档操作
1.api种类 1.1 TransportClient 是Elasticsearch官方的api TransportClient可以支持2.x,5.x版本,TransportClient将会在Elas ...
- ES的创建索引和文档操作
索引操作 1)创建索引 对比关系型数据库,创建索引就等同于创建数据库 点击postman ,创建一个new collections 再改个名 在Postmnan中,向ES服务器发PUT请求: http ...
- ES 04 - Elasticsearch查询索引文档的6种方法
博客转载方面自己查看 目录 1 Query String Search(查询串检索) 2 Query DSL(ES特定语法检索) 3 Query Filter(过滤检索) 4 Full Text Se ...
- 在Elasticsearch中索引Java Bean的简单方法
在数据存储方面,Java程序员习惯于使用魔术般持久的Java Bean. 诸如Hibernate和用于关系数据存储的JPA规范或Morphia和Spring Data MongoDB之类的解决方案是受 ...
- 用Java代码在ElasticSearch中索引PDF文件?
以下是我的代码: InputStream inputStream = new FileInputStream(new File("mypdf.pdf"));try {byte[] ...
- ElasticSearch入门一(索引CRD和文档的CRUD)
文章目录 说明 索引的常用操作 1. 查询所有的索引信息 2. 创建索引 3. 删除索引 文档的常用操作 1. 新增文档 2. 查询文档 3. 替换文档 4. 删除文档 5. 更新文档 6. 批量查询 ...
最新文章
- javascript:window.showModalDialog缓存问题
- 从青铜到王者的路线,java不同系统间数据同步
- 公共端接正极还是负极_电动车通过增加电池来提高续航能力,到底是并联好还是串联好?...
- pyqt5 给按钮设置css样式和界面背景设置
- 将ubuntu的home迁移至第二块磁盘
- WHILE (Transact-SQL)
- Pyston v2 发布:比 Python 快 20%
- 将bat文件转化成exe
- python requests 代理ip被禁_python requests 测试代理ip是否生效
- 微信视频号如何申请认证,流程是什么?
- ESP32实战小项目-小气象站
- [转载]Swift GYB
- 电商直播的直播类型有哪些?
- 电脑快速复制粘贴大文件
- AVR单片机网址推荐 .
- 采购订单历史表EKBE和物料凭证表MSEG的关系
- 怎样删除oracle注册表信息
- Day020 - pdf合并与excel/csv读取写入
- 2020年第十一届蓝桥杯A组省赛
- python列表同时添加多个元素_python怎么向列表中添加多个元素