输入:
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
}



