索引的管理

创建索引

输入:
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中索引和文档的管理相关推荐

  1. elasticsearch5.0.0中索引和文档接口的变化

    2019独角兽企业重金招聘Python工程师标准>>> 索引接口变化 当运行索引映射的时候禁止关闭或删除索引操作. 在5.0之前的版本,当索引正在进行映射操作的时候,关闭索引或者删除 ...

  2. 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...

    第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...

  3. 【Elasticsearch】估算在 Elasticsearch 中存储文档的成本

    1.概述 翻译:估算在 Elasticsearch 中存储文档的成本 AppDynamics 一直在增加使用 ElasticSearch 来实现对大量数据点的实时分析.其中,我们记录了最终用户对我们产 ...

  4. Elasticsearch基础(三)索引和文档操作

    1.api种类 1.1 TransportClient 是Elasticsearch官方的api TransportClient可以支持2.x,5.x版本,TransportClient将会在Elas ...

  5. ES的创建索引和文档操作

    索引操作 1)创建索引 对比关系型数据库,创建索引就等同于创建数据库 点击postman ,创建一个new collections 再改个名 在Postmnan中,向ES服务器发PUT请求: http ...

  6. ES 04 - Elasticsearch查询索引文档的6种方法

    博客转载方面自己查看 目录 1 Query String Search(查询串检索) 2 Query DSL(ES特定语法检索) 3 Query Filter(过滤检索) 4 Full Text Se ...

  7. 在Elasticsearch中索引Java Bean的简单方法

    在数据存储方面,Java程序员习惯于使用魔术般持久的Java Bean. 诸如Hibernate和用于关系数据存储的JPA规范或Morphia和Spring Data MongoDB之类的解决方案是受 ...

  8. 用Java代码在ElasticSearch中索引PDF文件?

    以下是我的代码: InputStream inputStream = new FileInputStream(new File("mypdf.pdf"));try {byte[] ...

  9. ElasticSearch入门一(索引CRD和文档的CRUD)

    文章目录 说明 索引的常用操作 1. 查询所有的索引信息 2. 创建索引 3. 删除索引 文档的常用操作 1. 新增文档 2. 查询文档 3. 替换文档 4. 删除文档 5. 更新文档 6. 批量查询 ...

最新文章

  1. javascript:window.showModalDialog缓存问题
  2. 从青铜到王者的路线,java不同系统间数据同步
  3. 公共端接正极还是负极_电动车通过增加电池来提高续航能力,到底是并联好还是串联好?...
  4. pyqt5 给按钮设置css样式和界面背景设置
  5. 将ubuntu的home迁移至第二块磁盘
  6. WHILE (Transact-SQL)
  7. Pyston v2 发布:比 Python 快 20%
  8. 将bat文件转化成exe
  9. python requests 代理ip被禁_python requests 测试代理ip是否生效
  10. 微信视频号如何申请认证,流程是什么?
  11. ESP32实战小项目-小气象站
  12. [转载]Swift GYB
  13. 电商直播的直播类型有哪些?
  14. 电脑快速复制粘贴大文件
  15. AVR单片机网址推荐 .
  16. 采购订单历史表EKBE和物料凭证表MSEG的关系
  17. 怎样删除oracle注册表信息
  18. Day020 - pdf合并与excel/csv读取写入
  19. 2020年第十一届蓝桥杯A组省赛
  20. python列表同时添加多个元素_python怎么向列表中添加多个元素

热门文章

  1. 【H5模板】【html模板】【源码】760个H5的模板源码,没有你要不到,只有你想不到
  2. Security Onion安全洋葱架构概述
  3. NSGA2机器学习算法多目标优化
  4. 一年内卖旧房买新房可退税 夫妻财产如何操作
  5. springboot 常用工具(IOUtils、FileUtils)
  6. 64位eclipse免安装版下载
  7. DM7数据库及实例的安装详解
  8. 微信小程序仿微信聊天
  9. eos主网api节点
  10. Laravel框架中,Post请求返回419或者500,因为默认有csrf验证