ElasticSearch(二)— 索引和文档的管理操作

一、总概

Elasticsearch的操作基本都是通过http接口实现的。按照http的请求方式,有以下规律:
GET 用来获取资源,PUT 用来更新资源,DELETE 用来删除资源。所以对索引,GET 用来查看索引,PUT 用来创建索引,DELETE用来删除索引,还有一个 HEAD 请求,用来检验索引是否存在。

二、基本操作

2.1 索引的管理

创建索引:
put请求,ip:port/indexname 即可创建索引。如下所示:
在这里插入图片描述
查询索引:
get请求,ip:port/indexname 即可查询索引。如下所示:
在这里插入图片描述
列出所有的索引:
get请求,ip:prot/_cat/indices?v

关闭和打开索引:

POST /open-soft/_close

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

重新打开索引:

POST /open-soft/_open

索引静态配置:
只能在索引创建时或在状态为 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"
	}
}

索引动态设置:
通过接口“_settings”进行,同时查询配置也通过这个接口进行,比如:

get _settings
get /open-soft/_settings
get /open-soft,test1/_settings
配置索引则通过:
put test1/_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

注意: 索引的主分片数设置好后不能再修改,属于静态设置,每个主分片的副本数,可以动态设置。

配置映射:
映射(mapping)定义了每个字段的类型、字段所使用的分词器等。可以显式映射,由我们在索引映射中进行预先定义;也可以动态映射,在添加文档的时候,由 es 自动添加到索引,这个过程不需要事先在索引进行字段数据类型匹配等等,es 会自己推断数据类型。
显示映射:

put /open-soft/_mapping
{ 
	"properties" : 
		{ 
			"corp" : 
				{ "type" : "text"},
			"lang" : 
				{ "type" : "text"},
			"name" : {"type" : "text"}
		}
}

多数据类型:
如果说数组允许你使用同一个设置索引多项数据,那么多数据类型允许使用不同的设置,对同一项数据索引多次。带来的好处就是可以同一文本有多种不同的索引方式,比如一个字符串类型的字段,可以使用 text 类型做全文检索,使用keyword 类型做聚合和排序。我们可以看到 es 的动态映射生成的字段类型里,往往字符串类型都使用了多数据类型。当然,我们一样也可以自己定义:

put /open-soft/_mapping
{ 
	"properties" : 
			{ 
				"name" : 
					{ "type" : "text", 
					  "fields":
					  		{ "raw":
					  			{ "type" : "keyword"},
					  			"length":					{"type":"token_count","analyzer":"standard"}
}
}
}
}

在上面的代码里,我们使用"fields"就把 name 字段扩充为多字段类型,为name 新增了两个子字段 raw 和 length,raw 设置类型为 keyword,length 设置类型为 token_count,告诉 es 这个字段在保存还需要做词频统计。
通过 fields 字段设置的子字段 raw 和 length,在我们添加文档时,并不需要单独设置值,他们 name 共享相同的值,只是 es 会以不同的方式处理字段值。同样在检索文档的时候,它们也不会显示在结果中,所以它们一般都是在检索中以查询条件的形式出现,以减少检索时的性能开销。

2.2 文档的管理

添加文档:
put请求,ip:port/[索引名称]/_doc/[文档] ; 请求体放json格式数据,如下图所示:
在这里插入图片描述
如果增加文档时,在 Elasticsearch 中如果有相同 ID 的文档存在,则更新此文档。

当创建文档的时候,如果不指定 ID,系统会自动创建 ID。自动生成的 ID 是一个不会重复的随机数。使用 GUID 算法,可以保证在分布式环境下,不同节点同一时间创建的_id 一定是不冲突的。比如:
在这里插入图片描述

查看文档:
get请求,ip:prot/[索引名称]/_doc/[文档], 如下图所示:
在这里插入图片描述

更新文档:

post /open-soft/_update/1/
{ "doc":
	{ "year": 2016}
}

如果文档中存在 year 字段,更新 year 字段的值,如果不存在 year 字段,则会新增 year 字段,并将值设为 2016。
update 接口在文档不存在时提示错误,如果希望在文档不存在时创建文档,则可以在请求中添加 upsert 参数或 doc_as_upsert 参数,例如:

POST /open-soft/_update/5
{ "doc": { "year": "2020"
},"upsert":{ "name" : "Enjoyedu Framework", "corp" : "enjoyedu "
}
}

POST /open-soft/_update/6
{ "doc": { "year": "2020"
},"doc_as_upsert" : true
}

upsert 参数定义了创建新文档使用的文档内容,而 doc_as_upsert 参数的含义是直接使用 doc 参数中的内容作为创建文档时使用的文档内容。

删除文档:

delete /open-soft/_doc/1

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的小小酥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值